通常在项目日志查看过程中都是直接登录服务器,找到服务器通过一些命令查看日志。有时候在定位问题的时候比较麻烦,不能快速找到问题日志。
这次尝试在本地搭建简单的ELK查询日志相关信息。
Elasticsearch:用于日志搜索查询
Logstash:用于日志收集
Kibana:用于页面展示
1、下载Elasticsearch、因为是简单实用,下载解压后直接使用。
2、下载Kibana,修改config下kibana.yml,添加 elasticsearch.url: “http://127.0.0.1:9200“
3、下载Logstash,配置相关配置信息。
4、下载filebeat用于采集日志传送到Logstash、配置采集信息
filebeat配置:
备份原有filebeta.yml文件,新增filebeta.yml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| filebeat: prospectors: - paths: - /home/webdata/tomcat/logs/catalina.out input_type: log multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after fields: server_name: storemanager-api fields_under_root: true output: logstash: hosts: ["10.211.240.162:4560"]
|
filebeat其他配置可以参考:Filebeat安装部署及配置详解
Logstash配置:
新增文件tomcat_log4j.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| # 开放输入端口 input{ beats { host => "0.0.0.0" port => 4560 } } filter { #判断日志来源、通过来源分开处理 if [server_name] == "manager-api"{ #处理日志 grok { #lo4j日志配置为:log4j.appender.logstash.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n # 需要对日志进行拆分 match => { "message" => "(?<timestamp>[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}) \[(?<thread_name>.*)\] (?<log_level>.*) \[(?<class_name>.*)\] - (?<message>.*)" } overwrite => [ "message" ] } date { match => ['logtime', "yyyy-MM-dd HH:mm:ss,SSS"] locale => "cn" } } } #日志输出 output { stdout{ codec => rubydebug } #实际情况是需要依据日志来源建立不同的索引,不能全部混在一起 elasticsearch{ hosts =>["127.0.0.1:9200"] } }
|
分别启动4个服务、启动Logstash需要使用:**./bin/logstash -f tomcat_log4j.conf** 指定配置文件。
之后打开浏览器localhost:5601查看日志信息。
后续如果需要使用,可以控制权限之类,还有很多玩法。
在使用grok写表达式时,可以通过http://grokdebug.herokuapp.com/ 测试表达式
参考:
- Logstash 最佳实践
- ELKstack 中文指南
- ELK技术实战-安装Elk 5.x平台