前言
从上一章的内容中可以了解到logstash的工作原理 以及 logstash在大数据分析平台中所处的位置。logstash作为数据采集、数据分析等任务的处理核心组件,首先我们需要将其运行起来,并调试日志信息的接收和打印。
注意:默认当前环境已经安装好docker环境了~
1. logstash镜像拉取
拉取指定7.8.1版本的logstash镜像
1 | docker pull logstash:7.8.1 |
2. 输入与输出的简单配置
2.1 代码路径
├── logstatsh_study
├── config
└── logstash.yml
├── pipeline
└── in.conf
└── out.conf
├── syslog.py
├── udp.py
代码路径解释:
config文件夹下存放的是配置文件logstash.yml,配置与logstash相关的配置。
pipeline文件夹为管道文件,主要存放的是接收、输出、过滤日志信息的conf配置文件
syslog.py和dup.py文件,主要用于测试,实现推送日志信息
2.2 logstash.yml配置
在logstash.yml文件中设置如何运行logstash,当然也可以在启动logstash的时候在命令行中指定,所有在命令行中指定的参数会覆盖此文件中的配置。
如下是我在logstash.yml中定义的内容:
1 | http.host: "0.0.0.0" |
参数解释:
config.reload.automatic: true 表示:自动检测配置文件变动并自动重载。
path.logs 表示:设置日志存储的位置
http.host 表示:设置绑定的Ip地址
http.port 表示:设置绑定的端口
以下罗列了logstash.yml中其他的参数:
Setting | Description(描述) | Default value(默认值) |
---|---|---|
node.name |
节点的描述性名称。 | Machine’s hostname |
path.data |
Logstash及其插件持久化的数据的目录 | LOGSTASH_HOME/data |
pipeline.id |
The ID of the pipeline. | main |
pipeline.workers |
管道中filter和output阶段并行工作的worker的数量。 如果发现事件正在备份,或者CPU未饱和,请考虑增加此数量以更好地利用机器处理能力。 | CPU核心数量 |
pipeline.batch.size |
前面有提到,用来定义worker每次从inputs发送到中央队列中取出的batch的数量。更大的数量通常意味着更好的性能,但也会占用更多的内存,你可以在 jvm.options 文件中增加JVM堆空间。更多信息参考: Logstash配置文件 |
125 |
pipeline.batch.delay |
当创建管道数据batch都时候,worker等待inputs数据的时间,即使没有拿到batch.size 定义的数据量。 |
50 |
pipeline.unsafe_shutdown |
当此项设置为true 的时候,在收到shutdown事件的时候Logstash会强制退出,即使仍有数据在内存中。默认情况下,Logstash会拒绝退出直到所有接收到的数据发送给outputs。启用此选项可能导致在关闭期间丢失数据。 |
false |
path.config |
指定主管道配置文件路径,如果路径是目录或者通配符,Logstash会根据字母顺序进行读取。 | |
config.string |
包含用于主管道配置的一个字符串。和配置文件语法相同。 | None |
config.test_and_exit |
当此项设置为true 的时候,会检查配置文件,在完成之后退出。注意此项设置不会检查Grok匹配的正确性。 Logstash 可以从目录中读取多个配置文件。如果此项配置结合 log.level: debug ,Logstash会对组合的配置的每一个配置添加注释。(Logstash会将配置文件中的每一项以Debug的形式显示出来) |
false |
config.reload.automatic |
当此项设置为true 的时候,程序会周期性的检查配置文件的变化,并在有变化的时候重新加载配置文件。可以通过给进程发送SIGHUP信号来重读配置文件。 |
false |
config.reload.interval |
Logstash检查配置文件变动的频率。 | 3s |
config.debug |
设置为 true 的时候,将完整的编译配置作为debug日志消息。同时必须设置 log.level: debug . WARNING: 日志信息会包含明文密码。可能会导致你的密码明文出现在你的日志中。原文:The log message will include any password options passed to plugin configs as plaintext, and may result in plaintext passwords appearing in your logs! |
false |
config.support_escapes |
设置为true 之后,将处理一下转意: \n 转成换行符 (ASCII 10). \r 转成回车(ASCII 13). \t 转成tab (ASCII 9). \\ 转成”"本身 \ . \" 变成双引号 \' 变成引号 |
false |
modules |
When configured, modules must be in the nested YAML structure described above this table. |
None |
queue.type |
用于事件缓冲的内部队列模型。 设置为 memory 使用基于内存的队列, 或设置为 persisted 使用基于磁盘的 ACKed 队列 (persistent queues). |
memory |
path.queue |
启用持久化队列时的数据存储目录。 (queue.type: persisted ). |
path.data/queue |
queue.page_capacity |
启用持久化队列时可以使用的页面文件大小。 (queue.type: persisted ). The queue data consists of append-only data files separated into pages. |
64mb |
queue.max_events |
启用持久化之后队列中未读事件的最大数量。 (queue.type: persisted ). |
0 (unlimited) |
queue.max_bytes |
队列最大的容量,以字节为单位,确保你定义的位置的磁盘上有足够的空间。 如果queue.max_events 和queue.max_bytes 同时定义,先到达的会生效。也就是小的生效。 |
1024mb (1g) |
queue.checkpoint.acks |
持久化队列开启的情况下,强制检查点之前ACKed事件的最大数量。 (queue.type: persisted )。 设置为0表示不限制:queue.checkpoint.acks: 0 |
1024 |
queue.checkpoint.writes |
持久化队列开启的情况下,强制检查点之前writes事件的最大数量。 (queue.type: persisted )。 设置为0表示不限制:queue.checkpoint.writes: 0 |
1024 |
queue.drain |
开启之后,Logstash处理完成持久化队列之后才会关闭。 | false |
dead_letter_queue.enable |
开启由插件提供的DLQ功能。 | false |
dead_letter_queue.max_bytes |
每个dead letter队列的最大值。 超出的部分会被删除。 | 1024mb |
path.dead_letter_queue |
存储dead-letter队列的目录。 | path.data/dead_letter_queue |
http.host |
设置绑定的IP地址 | "127.0.0.1" |
http.port |
设置绑定的端口 | 9600 |
log.level |
设置日志级别,有以下几种: fatal``error``warn``info``debug``trace |
info |
log.format |
设置日志格式。设置为json 以JSON格式记录日志。或这只为 plain 使用 Object#.inspect 记录日志。(应该是设置Logstash日志格式) |
plain |
path.logs |
The directory where Logstash will write its log to. | LOGSTASH_HOME/logs |
path.plugins |
指定Logstash搜索插件的目录,可以多次设置以设置多个查检目录。目录必须遵循以下结构: PATH/logstash/TYPE/NAME.rb 其中TYPE is inputs , filters , outputs , 或 codecs , NAME 就是插件的名字。 |
2.3 pipeline管道配置
从Logstash6.0开始,引入了Multiple Pipeline,用户可以在./config/pipeline.yml中配置单管道 或 多管道,并指定管道配置文件在./pipeline/in.conf文件和./pipeline/out.conf文件。启动logstash后,如果安装了X-Pack插件,就可以在Kibana->Monitoring->Logstash 中看到相关的管道信息。
以下在pipeline文件夹下定义接收和输出日志的管道文件:
2.2.1 in.conf为定义接收日志的规则文件
1 | input { |
说明:通过514端口接收系统日志。其中使用grok组件来解析传入的数据,并转化具有结构化的数据。grok的详细用法方法,请看logstash-grok组件的使用规则
2.2.2 out.conf为定义输出日志的规则文件
1 | output { |
说明:rubydebug其实就是codec的一种编码格式,方便我们测试和调试,美化output输出,也可以理解成对输出进行格式化。
3. logstash 启动
在in.conf管道文件中配置了接收端口为514的系统日志syslog,因此需要配置防火墙ACLs,参考地址:https://discuss.elastic.co/t/logstash-bind-to-port-514/44022/9
3.1 防火墙
syslog 端口日志转发命令,如下:
1 | sudo firewall-cmd --permanent --zone=internal --add-port=514/udp #syslog port |
3.2 Docker容器启动
docker容器启动的时候,需要注意以下几点:
1)需要映射logstash.yml文件路径,即本地的logstash.yml必须与容器的/usr/share/logstash/config/logstash.yml形成映射关系。
2)需要映射管道pipeline文件夹,即本地pipeline文件夹必须与容器的/usr/share/logstash/pipeline文件夹形成映射关系。
1 | docker run -itd --network host -u root -p 514:514/udp -v /media/psf/Home/study_workspace/logstatsh_study/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /media/psf/Home/study_workspace/logstatsh_study/pipeline/:/usr/share/logstash/pipeline/ --name=logstash logstash:7.8.1 |
4. 调试
调试环境:由于启动logstash容器的时候采用host模式,因此可以在本地直接执行以下脚本,即可实现日志发送与logstash日志的接收
模拟向系统日志syslog 514端口发送日志消息,并在name为logstash的容器中查看接收并输出的日志信息。
syslog.py中的代码逻辑如下:
1 | # coding:utf-8 |
通过portainer进行查看name为logstash的容器日志,可以发现执行python syslog.py命令后,容器的日志中正常打印了接收日志的内容,并通过grok进行了结构化的处理,如下图所示: