关于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
修改相应配置文件
修改config 下的 logstash.yml 文件,主要修改 es 的地址
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:9服务器托管网200
,但这里没有使用具体的IP
地址,而是用了一个名为elasticsearch
的服务名或容器名。
elasticsearch:9200 就是通过内部DNS解析机制引服务器托管网用在同一网络命名空间下的Elasticsearch服务容器的9200端口,这意味着Logstash或相关组件收集的监控信息将被自动发送到关联的Elasticsearch容器进行存储和分析。
安全考虑
如果为了安全考虑给ElasticSearch设置了访问认证,则需要配置用户名与密码,需要新增2条认证配置:
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "123456"
最终示例:
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
在Elasticsearch
、Logstash
或其他使用Java
虚拟机(JVM
)的应用程序中,jvm.options
文件是用来配置JVM
运行时参数的重要文件。当你需要调整JVM
相关的设置,比如堆内存大小、垃圾回收策略、线程数量等时,就需要修改这个文件。
# 增加JVM堆内存大小
-Xms512m
-Xmx512m
修改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
}
}
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
查看运行情况
docker logs -f logstash
SpringBoot 整合 ELK
引入Maven依赖
dependency>
groupId>net.logstash.logbackgroupId>
artifactId>logstash-logback-encoderartifactId>
version>7.1.1version>
dependency>
修改项目内的 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>
启动项目查看是否成功推送日志
教程结束!
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net