分布式系统中的日志散落在各个服务器中,对于问题的定位和分析有诸多不变;ELK日志收集与分析平台是当下使用最为广泛的分布式日志平台。它的基本流程是:各服务将日志通过
logstash
进行过滤和格式化,存储至es
中,kibana
作为可视化界面提供日志的检索与分析功能。此处为了提高服务器的性能,减少服务直接将日志输出至es带来的性能损耗,引入了Rabbitmq
作为es与服务之间的解耦工具,所以完整的流程就是:系统将日志输出到rabbitmq中;logstash对接mq并从中获取日志信息进行过滤与格式化处理;并将处理后的日志数据存储至es中;开发人员根据kibana提供的界面对日志进行分析。
以下仅为在学习过程中搭建环境过程中的记录,具体应用到生产环境中还需要考虑各个服务组件的高可用以及性能调优等问题。Rabbitmq的安装网上教程已经很多了,下载解压包以及docker安装都可以,在这里不作展示;仅展示服务结合Logback输出日志到rabbitmq以及elk搭建的过程
1、应用程序引入logback日志,并配置输出日志到rabbitmq:
(1)引入logback
依赖:
org.slf4j
slf4j-api
ch.qos.logback
logback-classic
ch.qos.logback
logback-core
org.slf4j
log4j-over-slf4j
(2)创建logback.xml
文件,配置appender
输出日志到rabbitmq:
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{10}-%msg%n
{
"time": "%date{ISO8601}",
"thread": "%thread",
"level":
"%level",
"class": "%logger{60}",
"message": "%msg"
}
localhost
5672
guest
guest
spring-cloud-system
logstash
true
direct
ex_logstash
true
UTF-8
true
PERSISTENT
2、ElasticSearch的安装:
(1)下载安装包并解压:es下载链接;
(2)创建数据与日志的存储目录,并修改config/elasticsearch.yml
文件指定:
cluster.name: my-application
# ------------------------------------ Node ------------------------------------
# 节点名称
node.name: es-node-1
# ----------------------------------- Paths ------------------------------------
# 数据存储目录(自行替换)
path.data: /opt/elk-stack/data/es/data
# 日志文件存储目录
path.logs: /opt/elk-stack/data/es/log
# ----------------------------------- Memory -----------------------------------
# 启动时是否锁定内存
bootstrap.memory_lock: false
# ---------------------------------- Network -----------------------------------
# 主机ip
network.host: 127.0.0.1
# 端口
http.port: 9200
(3)执行bin目录下的启动脚本并访问http://localhost:9200
验证是否启动成功,成功则会出现以下提示:
{
"name" : "es-node-1",
"cluster_name" : "my-application",
"cluster_uuid" : "wRRNwIGTQeC3pgCnB3NBEA",
"version" : {
"number" : "7.3.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "4749ba6",
"build_date" : "2019-08-19T20:19:25.651794Z",
"build_snapshot" : false,
"lucene_version" : "8.1.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
3、logstash的安装与配置:
(1)下载安装包并解压:下载链接。
(2)创建数据与日志信息的存储目录,并修改config/logstash.yml
文件进行指定:
path.data: /opt/elk-stack/data/logstash/data
path.logs: /opt/elk-stack/data/logstash/log
(3)logstash启动时需要指定输入与输出的方式,此处要实现的效果是从Rabbitmq中获取数据输出至es中存储,因此创建rabbitmq.conf
文件:
input{
rabbitmq{
host=>"localhost" # 这里填写Rabbitmq的地址,确保可以ping通
port=> 5672 # 这里填写Rabbitmq的端口
user=>"guest" # 这里填写Rabbitmq的用户名
password=>"guest" # 这里填写Rabbitmq的密码
queue=>"q_logstash" # 这里填写Rabbitmq的队列的名称
durable=> true # 这里填写Rabbitmq的队列的durable属性
codec=>json # 这里填写Rabbitmq的队列的内容是什么格式
type=> "result" # 这里选填
}
}
filter{
}
output {
elasticsearch {
hosts => ["localhost:9200"] # ElasticSearch的地址加端口
index => "position-%{+YYYYMMdd}" # ElasticSearch的保存文档的index名称,
document_type=>"%{messageType}" # ElasticSearch的保存文档的type
document_id=>"%{mark_uuid}" # ElasticSearch的保存文档的id
}
}
(4)指定配置文件并启动:./bin/logstash -f rabbitmq.conf
,访问http://localhost:9600
出现一些关于logstash的配置信息即表示安装成功。
4、kibana的安装:
(1)下载安装包并解压:下载链接。
(2)修改配置文件config/kibana.yml
,配置es监控信息(可配置集群):
server.port: 5601
server.host: "localhost"
elasticsearch.hosts: ["http://localhost:9200"]
(3)执行启动脚本,访问http://localhost:5601
进入kibana界面即可查看日志信息。