设为首页 收藏本站
查看: 1788|回复: 0

[经验分享] 基于ELK的日志分析/存储/展示

[复制链接]

尚未签到

发表于 2019-1-28 10:30:24 | 显示全部楼层 |阅读模式
基于ELK的日志分析/存储/展示

背景介绍
  在我们日常生活中,我们经常需要回顾以前发生的一些事情;或者,当出现了一些问题的时候,可以从某些地方去查找原因,寻找发生问题的痕迹。无可避免需要用到文字的、图像的等等不同形式的记录。用计算机的术语表达,就是 LOG,或日志。
  日志,对于任何系统来说都是及其重要的组成部分。在计算机系统里面,更是如此。但是由于现在的计算机系统大多比较复杂,很多系统都不是在一个地方,甚至都是跨国界的;即使是在一个地方的系统,也有不同的来源,比如,操作系统,应用服务,业务逻辑等等。他们都在不停产生各种各样的日志数据。根据不完全统计,我们全球每天大约要产生 2EB(1018)的数据。
  面对如此海量的数据,又是分布在各个不同地方,如果我们需要去查找一些重要的信息,难道还是使用传统的方法,去登陆到一台台机器上查看?看来传统的工具和方法已经显得非常笨拙和低效了。于是,一些聪明人就提出了建立一套集中式的方法,把不同来源的数据集中整合到一个地方。
  一个完整的集中式日志系统,是离不开以下几个主要特点的:

- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统
- 存储-如何存储日志数据
- 分析-可以支持 UI 分析
- 警告-能够提供错误报告,监控机制
ELK简介

  ELK并不是一款软件,而是一套完整的日志解决方案,由Elasticsearch、Logstash、Kibana这三款开源软件组成;通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈
  Elasticsearch是基于Lucene开发的分布式存储检索引擎,用来存储各类日志;
  Logstash对日志进行收集、分析,并将其存储供以后使用;
  Kibana是基于Node.js开发的展示工具,为Logstash和Elasticsearch提供用于日志展示的web页面,还用于帮助汇总、分析和搜索重要日志数据。



  基本流程是 logstash 负责从各种数据源里采集数据,然后再写入 Elasticsearch,Elasticsearch 对这些数据创建索引,然后由 Kibana 对其进行各种分析并以图表的形式展示。


部署安装ELK


  • 实验环境


主机名
IP地址
相关软件包




CentOS7-1(linux-node1)
172.16.10.138
jdk、logstash、elasticsearch、kibana


CentOS7-2(linux-node2)
172.16.10.147
jdk、elasticsearch


  • 安装部署步骤
  • 关闭两台服务器的防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
安装Elasticsearch、java环境

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch      //导入密钥
cd /etc/yum.repo.d/
vim elasticsearch.repo       //配置yum仓库
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1
yum list    //重新加载yum仓库
yum install elasticsearch -y
yum install java -y  (1.8.0版本)
java -version     //查看java环境的版本信息确认是否安装
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)


  • 安装完成后可以查看命令存放目录

  cd /usr/share/elasticsearch/bin




  • 修改Elasticsearch的配置文件

  vim /etc/elasticsearch/elasticsearch.yml


-------cluster群集----------------
17行 集群名称
cluster.name: silence    //开启 (自定义)
---------node节点-----------------
23行 节点名称
node.name: linux-node1       //开启 (自定义)
-----------paths路径------------
工作目录
33:path.data: /data/es-data        //数据存放位置
37:path.logs: /var/log/elasticsearch/      //日志存放位置
43行 防止交换swap分区
bootstrap.memory_lock: true      //锁定内存
54行 监听网络
network.host: 0.0.0.0
58行 端口号
http.port: 9200



  • 创建数据存放目录、开启服务

mkdir -p /data/es-data      //创建数据存放目录
chown -R elasticsearch:elasticsearch /data/es-data/    //修改属主属组信息
systemctl start elasticsearch.service   //开启服务
netstat -ntap | grep 9200        //检查端口是否开启



  • web网页测试

  浏览器输入       172.16.10.138:9200




  • 可以使用两种方法和ES进行交互

  第一种  JAVA API
  第二种  RESTful API (通过json格式交互)



  • RESTful API (通过json格式交互)

curl -i -XGET 'http://172.16.10.147:9200/_count?pretty' -d '{
"query": {
"match_all": {}
}
}'
//输出显示
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 95
{
"count" : 0,
"_shards" : {
"total" : 0,
"successful" : 0,
"failed" : 0
}
}




  • 内存解锁和文件限制
  生产环境中必须要修改(注意)

vim /etc/security/limits.conf
G到行尾添加
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
* soft nofile 65535        
* hard nofile 65535
//重启生效   (生产环境中建议重启)

  • ES插件之elasticsearch-head

/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head        //下载ES插件
安装位置/usr/share/elasticsearch/plugins/head



  • 网页测试插件

  浏览器访问  172.16.10.138:9200/_plugin/head/




  • 添加复合查询测试

添加 复合查询
/index-demo/test    POST
{
"user":"tom",
"mesg":"hello world"
}
提交请求
----------返回显示--------------
{
"_index": "index-demo",
"_type": "test",
"_id": "AWVDUuVUPJxKK7V6Dj8E",
"_version": 1,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}




  • 部署ES群集(在第二台服务器上安装部署Elasticsearch)

  //这里和上面部署第一台是一样的所以小编上命令,不同的地方小编会注明的哦!


rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch      //导入密钥
cd /etc/yum.repo.d/
vim elasticsearch.repo       //配置yum仓库
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1
yum list    //重新加载yum仓库
yum install elasticsearch -y
yum install java -y  (1.8.0版本)
java -version     //查看java环境的版本信息确认是否安装
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
vim /etc/elasticsearch/elasticsearch.yml
-------cluster群集----------------
17行 集群名称
cluster.name: silence    //开启 (自定义)
---------node节点-----------------
23行 节点名称
node.name: linux-node1       //开启 (自定义)
-----------paths路径------------
工作目录
33:path.data: /data/es-data        //数据存放位置
37:path.logs: /var/log/elasticsearch/      //日志存放位置
43行 防止交换swap分区
bootstrap.memory_lock: true      //锁定内存
54行 监听网络
network.host: 0.0.0.0
58行 端口号
http.port: 9200
69行 自动发现机制
discovery.zen.ping.unicast.hosts: ["172.16.10.147", "172.16.10.138"]          //这里选择单播列表自动发现机制
mkdir -p /data/es-data      //创建数据存放目录
chown -R elasticsearch:elasticsearch /data/es-data/    //修改属主属组信息

  • 第一台节点服务器也要进行修改添加

  vim /etc/elasticsearch/elasticsearch.yml


69行 自动发现机制
discovery.zen.ping.unicast.hosts: ["172.16.10.138", "172.16.10.147"]          //这里选择单播列表自动发现机制

  • 重启第一台节点服务器及开启第二台服务器

systemctl stop elasticsearch.service
systemctl start elasticsearch.service

  • web页面测试查看

  浏览器访问 172.16.10.138:9200/_plugin/head/



Logstash部署

  简单来说logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。



  • 安装Logstash

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/logstash.repo
[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1
yum list
yum install logstash -y

  • 定义输入和输出流,类似管道

/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{} }'
hello

  • 详细格式显示

/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }'



  • 写入到elasticsearch中

/opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["172.16.10.138:9200"] } }'




  • 写入ES和同时生成文本

/opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["172.16.10.138:9200"] } stdout { codec => rubydebug } }'

  • 创建 logstash配置文件写入

  vim /etc/logstash/conf.d/01-logstash.conf


input { stdin { } }
output {
elasticsearch { hosts => ["172.16.10.138:9200"] }
stdout { codec => rubydebug }
}
/opt/logstash/bin/logstash -f /etc/logstash/conf.d/01-logstash.conf

  • 使用logstash配置文件:
  • 收集系统日志
  • 收集java异常日志
  • 事件优化处理

ln -s /opt/logstash/bin/logstash /usr/bin/
vim file.conf
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["172.16.10.138:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
logstash -f /root/file.conf



部署kibana


  • 下载安装kibana服务

wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz   //这里使用wget下载软件包,也可以复制链接至迅雷下载好之后共享上传
tar zxvf kibana-4.3.1-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
mv kibana-4.3.1-linux-x64/ kibana

  • 修改kibana的配置文件

  vim /usr/local/kibana/config/kibana.yml



//2行
server.port: 5601    //开启端口
//5行
server.host: "0.0.0.0"    //允许访问服务器的地址
//12行 ES地址
elasticsearch.url: "http://172.16.10.138:9200"
//20行
kibana.index: ".kibana"
  screen是linux下的一种多重视窗管理程序。在使用telnet或SSH远程登录linux时,如果连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的session.screen命令可以解决这个问题。



yum install screen -y


  • 启动监听


/usr/local/kibana/bin/kibana
ctrl+a+d  进行丢入后台
http://172.16.10.138:5601/









运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668593-1-1.html 上篇帖子: elk中elasticsearch安装启动报错 下篇帖子: 统一日志ELK部署配置(3)——logstash
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表