Bootstrap

日志监控ELK搭建

背景

一个应用如果出现错误的时候,正常我们处理的方式是到服务器上去找到日志目录,然后用各种linux的命令,tail 或者 cat命令 + grep去找相应的日志,这种方式,会比较笨拙,而且效率会比较低。并且如果是集群,或者多个应用组成的链路调用,查找问题会更麻烦。这时会想到,我们能否把日志信息进行统一存储,然后提供一个平台进行统一日志分析呢,ELK就是为了做这样一个事情。

ELK 全称是 elasticsearch(全文检索数据库)+ logstash(服务器端处理管道)+ kibana(Elasticsearch的数据可视化工具)

那么如果有了ELK这个存储,分析平台之后,就会想到这些日志该如何采集到elk里呢,这里有两种方式,1:通过代码侵入的方式直接用es里去写,2:通过采集器的方式去日志目录主动拉取日志,采集到es中,第一种方式可以到es官网去找相应的sdk去学习,这里不做说明,第二种方式es有提供了一些工具。下面我们主要介绍这几个工具的搭建,以及玩法。

以上就是一个正常的日志分析系统具备的功能,总结为以下几个特点

  • 收集-能够采集多种来源的日志数据

  • 传输-能够稳定的把日志数据传输到中央系统

  • 存储-如何存储日志数据

  • 分析-可以支持 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