在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制。无论是开发人员还是运维人员都无法准确的定位服务、服务器上面出现的种种问题,也没有高效搜索日志内容从而快速定位问题的方式。因此需要一个集中式、独立的、搜集管理各个服务和服务器上的日志信息,集中管理,并提供良好的UI界面进行数据展示,处理分析。
ELK介绍
1、ELK分别是Elasticsearch、Logstash、Kibana三个开源框架缩写。
框架 | 简介 | 作用 |
---|---|---|
Elasticsearch | 开源分布式搜索引擎,提供存储、分析、搜索功能。特点:分布式、基于reasful风格、支持海量高并发的准实时搜索场景、稳定、可靠、快速、使用方便等。 | 接收搜集的海量结构化日志数据,并提供给kibana查询分析 |
Logstash | 开源日志搜集、分析、过滤框架,支持多种数据输入输出方式。 | 用于收集日志,对日志进行过滤形成结构化数据,并转发到elasticsearch中。 |
Kibana | 开源日志报表系统,对elasticsearch以及logstash有良好的web页面支持。 | 对elasticsearch提供的数据进行分析展示 |
日志服务器
- 搭建一个用于可视化的Kibana和用于搜索的Elasticsearch
需要新建一个文件夹用于存放数据
mkdir esdata
docker run --name elasticsearch -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -v "/home/louis/esdata":/usr/share/elasticsearch/data -p 9200:9200 -d elasticsearch:7.6.1
https://blog.51cto.com/13555423/2455307?source=dra
- 运行可视化工具Kibana
docker run -d -p 5601:5601 \
--link elasticsearch:elasticsearch \
-e "I18N_LOCALE=zh-CN" \
-e "I18N_LOCALE=zh-CN" \
-e ELASTICSEARCH_URL=http://elasticsearch:9200 \
--name kibana kibana:7.6.1
使用此方法创建Docker 日后需要开启只需要调用start
docker start elasticsearch
docker start kibanna
日志源主机
- 运行Logstash
需要写一个配置文件传进去
input {
rabbitmq {
host => "192.168.19.131"
user => "louis"
password => "louisyuan"
queue => "ros_log"
codec => "json"
durable => true
}
}
output {
elasticsearch {
hosts => [ "elasticsearch:9200" ]
}
}
filter {
date {
match => ["timestamp", "yyyy-MM-dd HH:mm:ss",
"MMM d yyyy HH:mm:ss", "UNIX"]
target => "@timestamp"
}
}
output {
elasticsearch {
hosts => [ "elasticsearch:9200" ]
index => "ros-log"
}
}
该文件描述了在rabbitmq下订阅消息转发到elasticsearch这个过程中的映射关系。
使用7.6.1版本开启Logstash并且链接elasticsearch,如果源主机和服务器主机不是同一台机,需要改下elasticsearch指向的地址。
docker run -d -p 4560:4560 -v ~/logstash/logstash.conf:/etc/logstash.conf --link elasticsearch:elasticsearch --name logstash logstash:7.6.1 logstash -f /etc/logstash.conf
使用此方法创建Docker,日后需要开启只需要调用start
docker start logstash