【详解】 ELK (ElasticStack) 实现日志监控

前言

关于日志监控、日志管理,对于任何一个成型的系统来说都是必不可少的,之前使用Commons-IO实现过日志监控功能,实践告诉我们这个过程很繁琐,当然,并不是难实现的意思。最终是数据存在MongoDB,可是实际应用中一般没人选择这种方式。 听说使用ElasticStack 可以很好的达到实现我们的目的,于是决定尝试了一下,这里对做一个简单的记录,希望对你有一定的帮助。

ElasticStack 介绍:

Demo 实现

说在前面

开始操作之前,请确保软件安装启动正常,以此结合如下配置和流程实现最终的效果。

分别启动fileBeat、logstash、es(单节点)、kibana,确保容器都启动成功,效果如下

使用Docker方式搭建ElasticStack:

案例实现流程图

创建Spring Boot 项目

必要的依赖

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId> 
    <version>2.9.9</version>
</dependency>

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.12.0</version>
</dependency>

启动类

日志框架使用LogBack,注意记录logBack的日志文件产出路径,后续需要用到。

项目部署、运行

========================================================================

查看日志文件内容

Logstash配置

========================================================================

logstash.conf

input {
  beats {
    port =>  "5678"
  }
}

# 过滤器
filter {
  # 对内容进行切割
  mutate {
    split => {"message"=>"|"}
  }
  # 将切割后的部分,分别添加成为字段
  mutate {
    add_field =>{
      "userId" => "%{[message][1]}"
      "visit" => "%{[message][2]}"
      "date" => "%{[message][3]}"
    }
  }
  # 字段添加类型
  mutate {
    convert => {
      "userId" => "integer"
      "visit" => "string"
      "date" => "string"
    }
  }
}

# 输出到控制台
#output {
#   stdout { codec => rubydebug }
#}

# 输出到es
output {
   elasticsearch {
       hosts => ["http://192.168.241.128:9200"]
   }
}

logstash.yml

FileBeat配置

========================================================================

ES配置

正常启动,并查看数据

========================================================================

Kibana配置

正常启动,访问 ip:5601

分别添加柱形图、饼图,并创建仪表盘

========================================================================

最终效果

========================================================================

经验分享 程序员 微信小程序 职场和发展