本文共 4157 字,大约阅读时间需要 13 分钟。
查看日志的方式一直是开发和运维工程师的日常工作。传统的方法主要是通过SSH客户端登录到各个服务器,使用命令如less或tail查看日志文件。这种方式在服务部署多机器的情况下效率极低,需要频繁切换服务器,且对日志时间顺序的判断可能存在困难。此外,搜索日志也比较麻烦,需要熟练掌握vi、less等命令,容易导致眼睛疲劳。
为了简化日志检索和管理,互联网公司普遍搭建日志管理和监控平台。ELK(Elasticsearch、Logstash、Kibana)组件群就成为了一个高效的解决方案。本文将基于ELK架构,搭建一个适合实际业务需求的日志管理平台。
传统的日志查看方式存在诸多不足:
为了解决这些问题,现代互联网公司普遍采用日志管理平台。无论是自行搭建(如Zabbix)还是使用云服务提供的监控平台(如阿里云),核心需求都是日志的高效采集、存储、检索和分析。因此,本文将基于ELK组件,构建一个完整的日志管理系统。
我们的日志格式如下:
2018-08-22 00:34:51.952 [INFO ] [org.springframework.kafka.KafkaListenerEndpointContainer#0-1-C-1] [com.cjs.handler.MessageHandler][39] - 监听到注册事件消息:
这个格式包含了:
2018-08-22 00:34:51.952[INFO]org.springframework.kafka.KafkaListenerEndpointContainer#0-1-C-1com.cjs.handler.MessageHandler监听到注册事件消息:logback.xml文件用于配置日志框架,具体设置包括:
在本例中,日志文件位于/data/logs/${projectName},例如/data/logs/oh-coupon和/data/logs/oh-promotion。
info.log和error.log两个文件即可完成采集任务。 Filebeat的核心配置文件是filebeat.yml,主要包括以下部分:
filebeat.inputs:定义要采集的文件路径和配置。output.logstash:指定Logstash的输出地址和配置。filebeat.inputs:- type: log enabled: true paths: - /data/logs/oh-coupon/info.log - /data/logs/oh-coupon/error.log fields: log_source: oh-coupon multiline.pattern: ^\d{4}-\d{1,2}-\d{1,2} multiline.negate: true multiline.match: after scan_frequency: 5s close_inactive: 1h ignore_older: 24h- type: log enabled: true paths: - /data/logs/oh-promotion/info.log - /data/logs/oh-promotion/error.log fields: log_source: oh-promotion multiline.pattern: ^\d{4}-\d{1,2}-\d{1,2} multiline.negate: true multiline.match: after scan_frequency: 5s close_inactive: 1h ignore_older: 24houtput.logstash: hosts: ["localhost:5044"] # 可选:SSL配置 # ssl.certificate_authorities: ["/etc/pki/root/ca.pem"] # ssl.certificate: "/etc/pki/client/cert.pem" # ssl.key: "/etc/pki/client/cert.key" Logstash的主要配置文件是logstash.yml,包括输入、过滤和输出设置。
xpack.monitoring.enabled: truexpack.monitoring.elasticsearch.username: "logstash_system"xpack.monitoring.elasticsearch.password: "123456"xpack.monitoring.elasticsearch.url: ["http://localhost:9200"]
Logstash的管道配置如下:
input { beats { port: 5044 }}filter { grok { match: { "message" => "%{TIMESTAMP_ISO8601:log_date}\s+\[%{LOGLEVEL:log_level}" } } date { match: ["log_date", "yyyy-MM-dd HH:mm:ss.SSS"] target: "@timestamp" }}output { if [log_source] == "oh-coupon" { elasticsearch { hosts: ["localhost:9200"] index: "oh-coupon-%{+YYYY.MM.dd}" user: "logstash_internal" password: "123456" } } if [log_source] == "oh-promotion" { elasticsearch { hosts: ["localhost:9200"] index: "oh-promotion-%{+YYYY.MM.dd}" user: "logstash_internal" password: "123456" } }} Logstash提供了丰富的插件用于输入、过滤和输出。常用的插件包括:
grok:用于从日志消息中提取结构化字段。date:用于解析日志中的日期字段并转换为@timestamp。elasticsearch:用于将日志数据输出到Elasticsearch索引。Elasticsearch的配置文件是elasticsearch.yml,主要设置包括:
xpack.security.enabled: true
其他配置均为默认值。
Kibana的配置文件是kibana.yml,主要包括:
server.port: 5601server.host: "192.168.101.5"elasticsearch.url: "http://localhost:9200"kibana.index: ".kibana"elasticsearch.username: "kibana"elasticsearch.password: "123456"xpack.security.enabled: truexpack.security.encryptionKey: "4297f44b13955235245b2497399d7a93"
[root@localhost ~]# su - cheng[cheng@localhost ~]$ cd $ES_HOME[cheng@localhost elasticsearch-6.3.2]$ bin/elasticsearch
[cheng@localhost kibana-6.3.2-linux-x86_64]$ bin/kibana
[root@localhost logstash-6.3.2]# bin/logstash -f second-pipeline.conf --config.test_and_exit[root@localhost logstash-6.3.2]# bin/logstash -f second-pipeline.conf --config.reload.automatic
[root@localhost filebeat-6.3.2-linux-x86_64]# rm -f data/registry[root@localhost filebeat-6.3.2-linux-x86_64]# ./filebeat -e -c filebeat.yml -d "publish"
完成以上配置和部署后,可以通过浏览器访问Kibana地址(默认为http://localhost:5601)进行日志检索和分析。
转载地址:http://zwhkz.baihongyu.com/