Docker 安装 LogStash

关于LogStash

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


拉取镜像并拷贝配置

bash 复制代码
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

修改相应配置文件

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

yaml 复制代码
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
  • 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条认证配置:

yaml 复制代码
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "123456"

最终示例:

yaml 复制代码
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "123456"

修改config下的jvm.options

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

bash 复制代码
# 增加JVM堆内存大小
-Xms512m
-Xmx512m

修改pipeline 下的 logstash.conf

json 复制代码
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
  }
}

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集群中相应的索引里,便于后续进行搜索、分析和可视化展示。

启动容器并挂载

bash 复制代码
#注意先删除之前的容器
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

查看运行情况

bash 复制代码
docker logs -f logstash

SpringBoot 整合 ELK

引入Maven依赖

xml 复制代码
<!-- logstash -->
<dependency>
  <groupId>net.logstash.logback</groupId>
  <artifactId>logstash-logback-encoder</artifactId>
  version>7.1.1</version>
</dependency>

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

xml 复制代码
    <springProperty scope="context" name="appName" source="spring.application.name"/>

    <!--输出到logstash的appender-->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--可以访问的logstash日志收集端口-->
        <destination>127.0.0.1:5044</destination>
        <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>

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


教程结束!

相关推荐
爱吃橘子橙子柚子2 天前
3CPU性能排查总结(超详细)【Linux性能优化】
运维·cpu
Sheffield3 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield3 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
马艳泽3 天前
win10下运行Start Broker and Proxy报错解决
docker
Elasticsearch3 天前
需要知道某个同义词是否实际匹配了你的 Elasticsearch 查询吗?
elasticsearch
舒一笑4 天前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
NineData4 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
用户13573999256604 天前
Windows 从 0 搭建 WSL2 原生 AI 开发环境:Codex + Docker + VSCode
docker
vi_h4 天前
在 macOS 上通过 Docker 安装并运行 Ollama(详细可执行教程)
macos·docker·ollama
黑心老魔4 天前
通过 Docker 创建开发环境
docker·开发环境