背景
一个应用如果出现错误的时候,正常我们处理的方式是到服务器上去找到日志目录,然后用各种 linux 的命令,tail 或者 cat 命令 + grep 去找相应的日志,这种方式,会比较笨拙,而且效率会比较低。并且如果是集群,或者多个应用组成的链路调用,查找问题会更麻烦。这时会想到,我们能否把日志信息进行统一存储,然后提供一个平台进行统一日志分析呢,ELK 就是为了做这样一个事情。
ELK 全称是 elasticsearch(全文检索数据库)+ logstash(服务器端处理管道)+ kibana(Elasticsearch 的数据可视化工具)
那么如果有了 ELK 这个存储,分析平台之后,就会想到这些日志该如何采集到 elk 里呢,这里有两种方式,1:通过代码侵入的方式直接用 es 里去写,2:通过采集器的方式去日志目录主动拉取日志,采集到 es 中,第一种方式可以到 es 官网去找相应的 sdk 去学习,这里不做说明,第二种方式 es 有提供了一些beats工具。下面我们主要介绍这几个工具的搭建,以及玩法。
以上就是一个正常的日志分析系统具备的功能,总结为以下几个特点
收集-能够采集多种来源的日志数据
传输-能够稳定的把日志数据传输到中央系统
存储-如何存储日志数据
分析-可以支持 UI 分析
警告-能够提供错误报告,监控机制
基础环境
docker 环境
centos7.0
流程图
以上是一个简化的采集流程图
1:ELK 服务搭建
2:应用程序搭建
3:安装 FileBeats 组件,采集数据传输到 logstash 进行数据处理,然后传输到 es,kibana 进行展示
4:操作 Kibana 进行相应的处理
ELK 安装
1:es 安装
docker 方式安装 es ,此处演示以 docker 方式安装为主,官网还有其他安装方式,正式环境注意 es 的内存大小,数据磁盘大小,es 建议以集群方式部署。
安装时注意 es 跟 kibana 版本要一致
提前建好两个 docker 目录,用于存 es 的 plugins 与 data
/mnt/es/plugins /mnt/es/data
$ docker pull docker.elastic.co/elasticsearch/elasticsearch:6.7.0
$ docker tag docker.elastic.co/elasticsearch/elasticsearch:6.7.0 elasticsearch:latest
$ docker run -d -p 127.0.0.1:9200:9200 -p 9300:9300 -v /mnt/es/plugins:/usr/share/elasticsearch/plugins -v /mnt/es/data:/usr/share/elasticsearch/data --name elasticsearch -e "discovery.type=single-node" elasticsearch
复制代码
2:kibana 安装
$ docker pull docker.elastic.co/kibana/kibana:6.7.0
$ docker tag docker.elastic.co/kibana/kibana:6.7.0 kibana:latest
$ docker run -d -p 5601:5601 --link elasticsearch -e ELASTICSEARCH_URL=http://elasticsearch:9200 kibana
复制代码
3: logstash 安装
$ docker pull docker.elastic.co/logstash/logstash:6.5.4
$ docker tag docker.elastic.co/logstash/logstash:6.5.4 logstash:latest
复制代码
编辑 logstash.conf 配置文件,放在指定目录文件夹下,
配置时查看 es 容器的内部 ip
input {
beats {
port => "5044"
}
}
filter { grok {match => { "message" => "%{URIHOST} %{HAPROXYTIME} %{GREEDYDATA:logtype} %{GREEDYDATA:length} %{SYSLOG5424SD} %{GREEDYDATA:method}\|%{GREEDYDATA:user}\|%{GREEDYDATA:device}\|%{GREEDYDATA:logdata}"}} }
output {
elasticsearch {
hosts => ["172.17.0.3:9200"]
}
stdout {
codec => rubydebug
}
}
复制代码
运行 logstash
docker run -d --expose 5044 -p 5044:5044 --name logstash --link elasticsearch -v /mnt/es/conf/logstash.conf:/config-dir/logstash.conf logstash -f /config-dir/logstash.conf
复制代码
上述 3 个组件安装后,访问 http://ip:5601/app/kibana 就会出现以下页面,证明 es 平台已安装好
日志采集
在应用服务所在的服务器中,安装 FileBeats 采集器
1、下载
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.2-linux-x86_64.tar.gz
复制代码
2、解压
tar -xvf filebeat-5.2.2-linux-x86_64.tar.gz
复制代码
3、修改 filebeats.yml 配置文件
修改采集日志的路径
注释掉 es,使用 logstash
运行
nohup ./filebeat -e -c filebeat.yml &
复制代码
重启
ps -ef|grep "filebeat" 找到相应的进程杀掉,然后执行上面的命令启动
配置完成后,回到 elk 服务器,查看 logstash 容器的日志,如果有一堆业务日志,说明成功了
使用
全部配置完成之后,需要再 kibana 里配置一个索引
创建成功后就能搜索到了
还有一些 kibana 的一些操作,监控可自行百度,Visuli
评论