分布式日志系统-ELK-搭建Demo

日志是分析线上问题的重要手段,通常我们会把日志输出到控制台或者本地文件中,排查问题时通过根据关键字搜索本地日志,这在单机应用中使用起来还是非常方便有效的方式,但是现在随着用户规模的扩大,单机应用难以支撑大规模用户访问的业务,这时项目开发中采用分布式的架构,日志会记录到多个服务器或者文件中,同一个服务通常采用集群部署,一个异常日志都难以定位到具体的机器。分析问题可能要每个集群机器进行日志查询。这样做显然既费时又费力。这时统一进行日志管理和日志查询的分布式日志系统显得非常重要。

分布式日志系统ELK是指Elasticsearch+Logstash+Kibana。Elasticsearch是一个开源的全文检索工具用于日志存储,Logstash是一个日志收集工具。Kibana用于日志查询与展示。下面是系统简单架构图。

该系统架构流程为开始由Logstash直接增量读取应用日志文件然后将日志信息发送到Elasticsearch进行索引排序存储,此过程为日志收集过程。然后通过Kibana连接Elasticsearch进行日志查询展示,该过程为日志查询。

采用Logstash直接读取应用配置文件的好处是与业务代码解耦,不会增加业务代码的复杂性。并且通过业务代码埋点可以很好的了解异常调用链。接下来介绍简单安装。

Elasticsearch

这个直接启动就好Demo工程不用修改任何配置文件

Logstash

创建配置文件conf.conf。配置文件内容如下

input {
 file {
 path => ["/data/logs/java-base-web1/java-base-web.log", "/data/logs/java-base-web2/java-base-web.log"]
 type => "logs"
 start_position => "beginning"
 codec => multiline {
 pattern => "^\[\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
 negate => true
 what => "next"
 } 
 } 
}
output {
 elasticsearch {
 hosts => "localhost:9200"
 index => "logstash-test"
 } 
 stdout {
 codec => rubydebug {}
 } 
}

然后在cmd里面输入启动命令

bin/logstash -f conf.conf

 

Kibana

 

修改配置文件。添加如下配置内容

server.port: 5601

server.host: "localhost"

elasticsearch.url: "http://localhost:9200"

然后在cmd里面输入启动命令

bin/kibana

上面介绍了ELK的Demo搭建过程。接下来就是介绍针对日常使用中的问题进行说明

1.日志中中文被编码成16进制问题

该问题的解决办法是通过将logstash的input配置中添加codec => plain{ charset => "GBK" }结果如下

input {
 file {
 path => "F:\LogSystem\logs\logs.log"
 type => "logs"
 codec => plain{ charset => "GBK" }
 } 
}

2.日志查询方法

展开阅读全文

没有更多推荐了,返回首页