目录摘要
图文并茂搞定Logstash
此篇不谈优劣,只谈配置
一、版本说明
因为logstash版本迭代较快,每个版本的插件都有点区别,在使用logstash之前先想清楚自己的需求是什么,从哪种数据源同步到哪里,需要经过怎么样的处理,再确认哪个版本适合。
比如下面几点差异:
- filter中的http插件 ,6.6版本以后才有;
- output中jdbc的插件 7.1之前都没有;
注意:最好在linux下进行调试或使用,windows下会出现乱码
二、下载
你可以从官网 link下载二进制版本包,如logstash-7.6.2.tar.gz。
三、安装
Linux终端 解压缩,解压完之后的目录参见官网link
注意:使用root权限操作,防止没有权限访问某些日志文件。
四、测试
在解压缩后的目录(例如:/home/elk/logstash-7.6.2)下,执行如下命令
来验证是否安装成功
bin/logstash -e 'input { stdin { } } output { stdout {} }'
等待启动成功,直接输入任意字符,例如 hello world .会有如下显示,则安装成功:
{
"host" => "promote.cache-dns.local",
"@version" => "1",
"@timestamp" => 2020-04-03T02:16:28.722Z,
"message" => "hello world"
}
五、配置文件
默认放置在解压缩目录(如/home/elk/logstash-7.6.2/config
/)下,形如:logstash-sample.conf
1 输入插件
1.1 标准输入(Stdin)
配置示例
input {
stdin {
}
}
后面测试输出插件时,均用此子。
1.2 读取文件(File)
配置示例
input {
#文件输入
file {
path => ["/var/log/messages"] #监听的文件路劲,单个文件可以省略[],例如当前可简写成"/var/log/messages"。
type => "systemlog" #标记事件类型。提前预定的各个事件对应类型。
start_position => "beginning" #从什么位置开始读取文件数据,默认是结束位置。
stat_interval => "2" #每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。
}
}
1.3 读取 Syslog 数据
我是在192.168.122.1机器上装了logstash,只在这一台机器上模拟测试。不同服务器间,原理一样。
配置示例,只是配置成syslog 服务器来接收数据
input {
syslog {
type => "system-syslog"
host => "192.168.122.1" #logstash所在主机IP
port => "514" #监听端口
}
}
root用户下执行如下命令,修改所有日志发送至ogstash服务器。
vim /etc/rsyslog.conf
注意:此处修改的是你想要收集日志的服务上的文件
修改后如下图:
*此处IP为安装logstash的主机地址
执行如下命令,令日志生效:
systemctl restart rsyslog
启动logstash后,运行命令
:
ss -lntp | grep 514
可见514端口启动了,如下图:
再看logstash控制台输出,如下:
注意:测试完后记得将/etc/rsyslog.conf 复原。嘻嘻
1.4 读取 Collectd 数据
Collectd部分配置如下:
<Plugin network>
<Server "192.168.122.1" "5999"> ## logstash 的 IP 地址和 collectd 的数据接收端口号
</Server>
</Plugin>
Logstash配置示例:
#Collectd 数据
udp {
port => 5999
buffer_size => 1452
workers => 3 # Default is 2
queue_size => 30000 # Default is 2000
codec => collectd { }
type => "collectd"
}
执行命令
启动Collectd:
systemctl start collectd.service
启动logstash后,等候些许就有信息,如下:
1.5 读取 Redis 数据
前提是有个可以正常运作的redis服务器,我环境信息为:
IP:10.148.180.204
PORT:6379
PASSWORD: 123456
注意防火墙问题,要不然写不进去。
1.5.1 列表模式
配置示例
input {
redis {
host => "192.168.64.1" # redis主机地址,字符串或字符串数组,可以指定port,会覆盖全局port
port => 6379 # redis端口号,默认6379
password => "123456" # redis 密码,默认不使用密码
data_type => "list" # 队列模式
key => "logstash_list_0" # 队列(列表)名称
codec => plain
}
}
成功启动logstash后,运行redis-cli,向list中加入数据:
随后观察logstash控制台,有如下信息:
指令概述
keys * ##列举出所有key
llen key ##查看对应key列表的长度
rpush key value ##向key列表中加入一条数据
1.5.2 发布/订阅模式
配置示例
input {
redis {
host => "192.168.64.1"
port => 6379
password => "123456"
data_type => "channel"
key => "logstash_channel_0"
}
}
成功启动logstash后,在redis-cli上发布,如下:
在logstash上查看,如下:
指令概述
publish channel message #将信息发送到指定的频道。
1.5.3 发布/订阅模式(多合一)
配置示例
redis {
host => "192.168.64.1"
port => 6379
password => "123456"
data_type => "pattern_channel"
key => "logstash-channel-*"
}
成功启动logstash后,在redis-cli上发布,如下:
在logstash上查看,如下:
1.5 读取网络数据
配置示例
input {
tcp {
port => 8888
mode => "server"
ssl_enable => false
}
}
成功启动logstash后,另开一个终端,执行如下操作:
在logstash上查看,局部信息如下(直到nc命令结束为止,信息也就加载完):
过滤插件(暂缺)
输出插件
此处测试用的输入数据均采用控制台输入(前面有提到),这样便于测试。
3.1 标准输出(Stdout)
配置示例
output {
#输出到控制台
stdout { }
}
成功启动logstash后,直接输入任意字符(例如 Test output).控制台输出,如下:
3.2 保存成文件(File)
配置示例
output {
#输出到文件
file {
path => "/usr/local/logstash/logs/test.log" #指定写入文件路径
flush_interval => 0 # 指定刷新间隔,0代表实时写入
codec => json #JSON格式
}
}
成功启动logstash后,直接输入任意字符(例如 Test file) .控制台回显如下:
对应文件中会写入如下信息:
3.3 输出到 Redis
前提是有个可以正常运作的redis服务器,我环境信息为:
IP:10.148.180.204
PORT:6379
PASSWORD: 123456
注意防火墙问题,要不然写不进去。
3.3.1 列表模式
配置示例
output {
redis {
host => "10.148.180.204" # redis主机地址,字符串或字符串数组,可以指定port,会覆盖全局port
port => 6379 # redis端口号,默认6379
password => "123456" # redis 密码,默认不使用密码
data_type => "list" # 队列模式
key => "logstash_list_0" # 队列(列表)名称
}
}
成功启动logstash后,直接输入任意字符(例如 Test redis) .可以在redis-cli上查看,如下:
指令概述
keys * ##列举出所有key
llen key ##查看对应key列表的长度
lpop key ##取出对应key列表中的一条数据
3.3.1 发布/订阅模式
配置示例
output {
redis {
host => ["10.148.180.204"] # redis主机地址,字符串或字符串数组,可以指定port,会覆盖全局port
port => 6379 # redis端口号,默认6379
password => "123456" # redis 密码,默认不使用密码
data_type => "channel" # 发布/订阅模式
key => "logstash_channel_0" # 频道名称
}
}
在redis-cli上订阅,如下:
成功启动logstash后,直接输入任意字符(例如 Test redis2) .可以在redis-cli上查看,如下:
指令概述
subscribe channel [channel …] #订阅给定的一个或多个频道的信息
六、常用命令
查看已安装插件列表:
./logstash-plugin list
启动logstash
./logstash -f 配置文件路径
启动logstash,重新加载配置文件
./logstash -f 配置文件路径 --config.reload.automatic
安装插件
./logstash-plugin install 插件名称