ELK日志解决方案

ELK日志解决方案

ELK套件日志系统应该是Elasticsearch使用最广泛的场景之一了,Elasticsearch支持海量数据的存储和查询,特别适合日志搜索场景。广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例,使用Logstash和Beats组件进行日志收集,Elasticsearch存储和查询应用日志,Kibana提供日志的可视化搜索界面。

安装es和kibana

本文版本为8.5.0

安装es和kibana文档可以参考:

https://blog.csdn.net/weixin_73195042/article/details/135835820

https://blog.csdn.net/weixin_73195042/article/details/135567295

此处es配置密码:elastic/111111

安装Logstash

请注意:Logstash版本必须和es版本一致!这里以8.5.0版本为例。

第一步:拉取镜像

docker pull logstash:8.5.0

第二步:需要提前在linux服务器上环境 /mydata/logstash/logstash.conf,内容如下

mkdir -p /mydata/logstash

json 复制代码
input {
  tcp {
          mode => "server"
          host => "0.0.0.0"
          port => 5044
          codec => json_lines
      }
}
filter{
  
}
output {
  elasticsearch {
      hosts => "192.168.200.6:9200"
      index => "project-%{+YYYY.MM.dd}"
      user => "elastic"
      password => "111111"
  }
}

第三步:创建容器

纯文本 复制代码
docker run --name docker_logstash -p 5044:5044 \
--restart=always \
--link docker_elasticsearch:es \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:8.5.0

安装Filebeat

第一步:授权

chmod 777 -R /var/log/messages

第二步:启动日志收集器

text 复制代码
docker run -d \
  --name=filebeat \
  --restart=always \
  -v filebeat-conf:/usr/share/filebeat \
  -v /var/log/messages:/var/log/messages \
  --link 1833f6a65c2a:docker_elasticsearch \
  elastic/filebeat:7.8.0
  
  1833f6a65c2a: es容器的ID

第三步:修改配置文件:

纯文本 复制代码
进入到目录:
cd /var/lib/docker/volumes/filebeat-conf/_data
修改配置文件
vim filebeat.yml
内容如下
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/messages
filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~

output.elasticsearch:
  hosts: '192.168.200.128:9200'
  indices:
   - index: "filebeat-%{+yyyy.MM.dd}"

重启filebeat 容器,运行检索模块

效果:以后虚拟机上的所有日志都会收集保存到es中,可以在kibana中进行检索。

Logstash环境问题

  1. 安装Logstash

  2. 通过查看Logstash容器日志,401未授权异常 ES8.0后必须有授权许可

  3. 修改宿主机Logstash配置文件添加授权配置信息即可:/mydata/logstash/logstash.conf。

    此处密码应该与es密码一致

    json 复制代码
    user => "elastic"
    password => "111111"
  4. 重启Logstash容器,再查看一下日志,发现没有报错。

项目中整合

  1. 引入依赖

    xml 复制代码
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>5.1</version>
    </dependency>
  2. 日志配置文件logback-spring.xml增加,日志Logstash策略

    xml 复制代码
    <!-- logstash日志 -->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!-- logstash ip和暴露的端口,logback就是通过这个地址把日志发送给logstash -->
        <destination>192.168.200.6:5044</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>
    
    <!-- 开发环境 -->
    <springProfile name="dev">
        <!-- com.atguigu日志记录器:业务程序INFO级别  -->
        <logger name="com.atguigu" level="INFO" />
        <!--<logger name="com.alibaba" level="WARN" />-->
        <!-- 根日志记录器:INFO级别  -->
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="LOGSTASH" />
        </root>
    </springProfile>
  3. 启动项目测试Java进程启动会将日志发送到Logstash,Logstash会自动将数据存入ES

  4. 这时候我们启动项目,然后进入es的控制台,输入:

    GET /project-2024.01.26/_search
    {
      "query": {
        "term": {
          "level.keyword": {
            "value": "WARN"
          }
        }
      }
    }
    

    这样我们就可以得到服务的日志了。

我们还可以通过一些开源组件让日志可视化的直接展示出来,而不需要我们每次在es中查询。例如:

Plumelog: 一个简单易用的java日志系统,解放你的日志查询困难问题,方便快速追踪问题,安装配置简单,性能优秀 演示视频地址:https://v.qq.com/x/page/g3308uxlcnw.html (gitee.com)

相关推荐
J不A秃V头A13 分钟前
IntelliJ IDEA中设置激活的profile
java·intellij-idea
DARLING Zero two♡15 分钟前
【优选算法】Pointer-Slice:双指针的算法切片(下)
java·数据结构·c++·算法·leetcode
vvw&22 分钟前
如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台
linux·运维·服务器·ubuntu·开源·github·graylog
小池先生26 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
CodeClimb30 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
odng32 分钟前
IDEA自己常用的几个快捷方式(自己的习惯)
java·ide·intellij-idea
CT随40 分钟前
Redis内存碎片详解
java·开发语言
o(╥﹏╥)42 分钟前
在 Ubuntu 上安装 VS Code
linux·运维·vscode·ubuntu·vs
brrdg_sefg1 小时前
gitlab代码推送
java
AI慧聚堂1 小时前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化