写点什么

日志监控 ELK 搭建

用户头像
陈靓-哲露
关注
发布于: 3 小时前

背景

一个应用如果出现错误的时候,正常我们处理的方式是到服务器上去找到日志目录,然后用各种 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


用户头像

陈靓-哲露

关注

还未添加个人签名 2018.04.12 加入

还未添加个人简介

评论

发布
暂无评论
日志监控ELK搭建