• Docker 安装 LogStash


    关于LogStash

    Logstash,作为Elastic Stack家族中的核心成员之一,是一个功能强大的开源数据收集引擎。它专长于从各种来源动态地获取、解析、转换和丰富数据,并将这些结构化或非结构化的数据高效地传输到诸如Elasticsearch等存储系统中进行集中分析和可视化展现。在本文中,我们将详细介绍如何借助Docker容器技术快速安装配置Logstash,以实现日志及各类事件数据的无缝集成与实时处理。


    拉取镜像并拷贝配置

    docker run -d --name logstash logstash:7.14.1
    
    # 拷贝数据
    docker cp logstash:/usr/share/logstash/config ./config
    docker cp logstash:/usr/share/logstash/data ./data
    docker cp logstash:/usr/share/logstash/pipeline ./pipeline
    
    #文件夹赋权
    chmod -R 777 ./config ./data ./pipeline
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    修改相应配置文件

    修改config 下的 logstash.yml 文件,主要修改 es 的地址

    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
    
    • 1
    • 2
    • http.host:当设置为 “0.0.0.0” 时,意味着服务将在所有可用网络接口上监听HTTP请求,允许任何IP地址的客户端连接。
    • xpack.monitoring.elasticsearch.hosts:指向Elasticsearch服务的URL ->http://elasticsearch:9200,但这里没有使用具体的IP地址,而是用了一个名为 elasticsearch 的服务名或容器名。

    elasticsearch:9200 就是通过内部DNS解析机制引用在同一网络命名空间下的Elasticsearch服务容器的9200端口,这意味着Logstash或相关组件收集的监控信息将被自动发送到关联的Elasticsearch容器进行存储和分析。

    安全考虑
    如果为了安全考虑给ElasticSearch设置了访问认证,则需要配置用户名与密码,需要新增2条认证配置:

    xpack.monitoring.elasticsearch.username: "elastic"
    xpack.monitoring.elasticsearch.password: "123456"
    
    • 1
    • 2

    最终示例:

    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
    xpack.monitoring.elasticsearch.username: "elastic"
    xpack.monitoring.elasticsearch.password: "123456"
    
    • 1
    • 2
    • 3
    • 4

    修改config下的jvm.options

    ElasticsearchLogstash或其他使用Java虚拟机(JVM)的应用程序中,jvm.options 文件是用来配置JVM运行时参数的重要文件。当你需要调整JVM相关的设置,比如堆内存大小、垃圾回收策略、线程数量等时,就需要修改这个文件。

    # 增加JVM堆内存大小
    -Xms512m
    -Xmx512m
    
    • 1
    • 2
    • 3

    修改pipeline 下的 logstash.conf

    input {
      tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 5044
        codec => json_lines
      }
    }
    
    output {
      elasticsearch {
          hosts  => ["http://124.221.147.235:9200"]
          user => elastic
          password => 123456
          index  => "logs-%{+YYYY.MM}"
          codec  => "json"
      }
      stdout {
        codec => rubydebug
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    input部分:

    • 使用TCP输入插件(tcp)创建一个服务器监听器,等待来自客户端的连接。
      • mode => "server" 指定为服务器模式,接受来自其他服务或应用的日志数据。
      • host => "0.0.0.0" 表示在所有网络接口上监听连接请求。
      • port => 5044 设置了监听端口为5044
      • codec => json_lines 指定了编解码器类型,这意味着每个TCP消息应该包含一个或多条JSON格式的数据,每行一条JSON记录。

    output部分:

    • 使用Elasticsearch输出插件(elasticsearch)将处理后的日志事件发送到Elasticsearch集群。
      • hosts => "127.0.0.1:9200" 设置了Elasticsearch集群的地址与端口,这里指本地主机上的默认Elasticsearch实例。
      • index => "%{[spring.application.name]}-%{+YYYY.MM.dd}" 定义了索引名称模板。该模板会根据事件中的字段动态生成索引名,其中:
        • %{[spring.application.name]} 是从日志事件中提取的Spring Boot应用的名字作为索引前缀。
        • %{+YYYY.MM.dd} 是基于当前日期时间动态生成的索引后缀,每天都会创建一个新的索引以存储当天的日志数据。

    这样配置后,Logstash将作为一个TCP日志收集服务器运行,并且能够接收JSON格式的日志数据,然后将其按照指定的规则写入到Elasticsearch集群中相应的索引里,便于后续进行搜索、分析和可视化展示。

    启动容器并挂载

    #注意先删除之前的容器
    docker rm -f logstash
    
    # 启动容器并挂载
    docker run --name logstash \
    -p 5044:5044 \
    -p 9600:9600 \
    --privileged=true \
    -e ES_JAVA_OPTS="-Duser.timezone=Asia/Shanghai" \
    -v /mydata/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
    -v /mydata/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
    -d logstash:7.14.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    查看运行情况

    docker logs -f logstash
    
    • 1

    SpringBoot 整合 ELK

    引入Maven依赖

    
    <dependency>
      <groupId>net.logstash.logbackgroupId>
      <artifactId>logstash-logback-encoderartifactId>
      version>7.1.1version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改项目内的 logback.xml 文件 增加 logstash 配置

        <springProperty scope="context" name="appName" source="spring.application.name"/>
    
        
        <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            
            <destination>127.0.0.1:5044destination>
            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
                <customFields>{"spring.application.name":"${appName}"}customFields>
            encoder>
        appender>
    
        <root level="info">
            <appender-ref ref="logstash"/>
        root>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    启动项目查看是否成功推送日志


    教程结束!

  • 相关阅读:
    【Java】笔试-知识点复习
    131. 分割回文串
    MAC配置maven问题合集,1:安装配置maven最后输入 mvn -v 命令时报了 zsh: operation not permitted: mvn
    奇异递归模板
    Linux之安全最佳做法(未完成)
    解决开了burp suite ,火狐访问不了其他网站的问题
    mysql数据库报错:1166-Incorrect column name ‘xxx‘
    (附源码)springboot西安酷跑健身房管理系统 毕业设计 345421
    List 集合的一些常用操作
    分支和远程仓库
  • 原文地址:https://blog.csdn.net/qq_31762741/article/details/136775336