笔者最近在尝试使用Elasticsearch+Logstash搭建一个适合收集网络设备(路由器交换机防火墙)的syslog日志的平台。因为之前完全没接触过过ES全家桶,所以这两天好好百度了一下,然后发现:
网上的文章全是坑!!!
写的好的,一看时间,2017年的。2020年的新文章呢,又臭又长,又要装JAVA又要改环境变量,直接劝退。
众所周知的,逗老师是一个网络工程师。网络工程师跟开发者们看待事物的逻辑是不一样的。在仔细研究了原厂的文档之后,逗老师发现这玩意其实没有网上说的那么复杂。这些程序员们,就是喜欢把问题复杂化。
本文,笔者从一个网络工程师的视角出发,说一下如何用最简单的办法搭建一套适合收集交换机路由器syslog的ES平台。
本文主要避坑:
1、JAVA的各种问题
- ES最新版本自带Java,根本不需要瞎改环境变量
- ES推荐使用ES_JAVA变量而不是系统JAVA_HOME变量
2、ES启动时候的各种奇葩问题
- 权限问题,不要自己瞎搞,原生安装自己会解决好权限问题。
- yum全自动安装,最好的避坑选择。
3、Yum永远的神,能Yum安装的干啥非要作践自己去手动安装
一、Yum安装ES全家桶
1、yum install Elasticsearch
yum 安装具体指南参见
https://www.elastic.co/guide/en/elasticsearch/reference/7.12/rpm.html#rpm-repo
把下面这坨命令,直接刷进去
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat > /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
EOF
yum install --enablerepo=elasticsearch elasticsearch
安装包大约300MB,等待安装完成之后,刷下面的命令启动ES
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
启动完成后,用下面的命令验证
curl http://localhost:9200
看到如下的返回值基本就对了。
插一嘴,原厂做好的yum安装源就是这么6,没有头疼的权限、JAVA、环境变量各种问题。
2、yum install Kibana
yum 安装具体指南参见
https://www.elastic.co/guide/en/kibana/7.12/rpm.html#rpm-repo
同样,刷命令
cat > /etc/yum.repos.d/kibana.repo <<EOF
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
yum install kibana
简简单单,一步搞定。等待安装完成之后,刷下面的命令启动ES
systemctl enable kibana.service
systemctl start kibana.service
通过下面命令确认下5601端口是否已经开始监听
netstat -anpt | grep 5601
3、yum install Logstash
yum 安装具体指南参见
https://www.elastic.co/guide/en/logstash/7.12/installing-logstash.html#_yum
同样,刷命令
cat > /etc/yum.repos.d/logstash.repo <<EOF
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
yum install logstash
等待安装完成之后,刷下面的命令启动ES
systemctl enable logstash.service
systemctl start logstash.service
4、配置IPTABLES
iptables -I INPUT 1 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
cat > /etc/rc.d/rc.local <<EOF
#!/bin/bash
iptables-restore < /etc/sysconfig/iptables
touch /var/lock/subsys/local
EOF
chmod +x /etc/rc.d/rc.local
二、编辑配置文件
简单粗暴,直接刷命令就行
cat > /etc/kibana/kibana.yml <<EOF
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"
EOF
cat > /etc/elasticsearch/elasticsearch.yml <<EOF
cluster.name: elastic-eit-01(这里名字您自己看着改改)
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
EOF
cat > /etc/logstash/logstash.yml <<EOF
http.host: 0.0.0.0
http.port: 9600-9700
EOF
三、logstash 配置接收syslog
1、测试直接到控制台输出
首先创建logstash配置文件(命名为syslog.conf),专门用于解析syslog日志,刷命令如下
cat > /etc/logstash/conf.d/syslog.conf <<EOF
# 监听514端口
input {
syslog {
port => "514"
}
}
# 输出到控制台
output {
stdout {
codec => rubydebug
}
}
EOF
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/syslog.conf
等待控制台回显稳定后,看到Logtash已经开始监听udp 514端口,不要关闭这个控制台,停留在此观察现象。
再起一个新终端ssh到服务器上,或者换一台linux主机,使用logger直接触发一条测试syslog
logger -T -P 514 -n 127.0.0.1 'Hello,World!'
运行logstash的控制台收到
{
"@version" => "1",
"severity" => 0,
"severity_label" => "Emergency",
"facility" => 0,
"tags" => [
[0] "_grokparsefailure_sysloginput"
],
"@timestamp" => 2021-05-19T09:55:10.702Z,
"message" => "<5>May 19 17:55:10 root: Hello,World!\u0000",
"priority" => 0,
"host" => "127.0.0.1",
"facility_label" => "kernel"
}
至此,logstash监听UDP 514并格式化syslog的功能已经确认没问题了。
2、测试logstash转elastic
cat > /etc/logstash/conf.d/logstash_elastic.conf <<EOF
input {
syslog {
port => "514"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "syslog-message-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
EOF
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash_elastic.conf
同样,另起一个控制台
logger -T -P 514 -n 127.0.0.1 'Hello,World!'
通过curl直接查看ES内是否已经生成记录
curl http://localhost:9200/_cat/indices?v
查看具体的日志信息
curl http://localhost:9200/syslog-message-2021.05.19/_search
没问题,ES内已经可以记录日志了,日志格式如下:
{
"took":5,
"timed_out":false,
"_shards":{
"total":1,
"successful":1,
"skipped":0,
"failed":0
},
"hits":{
"total":{
"value":2,
"relation":"eq"
},
"max_score":"1.0",
"hits":[
{
"_index":"syslog-message-2021.05.19",
"_type":"_doc",
"_id":"EpsdhHkBCtbT25Ll1tX3",
"_score":"1.0",
"_source":{
"facility_label":"kernel",
"@version":"1",
"severity":0,
"@timestamp":"2021-05-19T10:13:38.423Z",
"message":"<5>May 19 18:13:38 root: Hello,World!\u0000",
"host":"10.152.132.21",
"tags":[
"_grokparsefailure_sysloginput"
],
"facility":0,
"severity_label":"Emergency",
"priority":0
}
},
{
"_index":"syslog-message-2021.05.19",
"_type":"_doc",
"_id":"E5sdhHkBCtbT25Ll2NVO",
"_score":"1.0",
"_source":{
"facility_label":"kernel",
"@version":"1",
"severity":0,
"@timestamp":"2021-05-19T10:13:38.915Z",
"message":"<5>May 19 18:13:38 root: Hello,World!\u0000",
"host":"10.152.132.21",
"tags":[
"_grokparsefailure_sysloginput"
],
"facility":0,
"severity_label":"Emergency",
"priority":0
}
}
]
}
}
3、正式配置Logtash+ES
刚才的配置文件测试完毕后不要动,就在那里放着就可以了。
因为刚才配置文件内使用的是514端口,Linux对1024以下的端口使用需要root权限。但是默认logstash.service运行是以非root用户运行,需要简单修改以下服务配置文件。
nano /etc/systemd/system/logstash.service
修改service配置文件中User=root
通过以下命令重新加载服务配置文件,并重启logstash
systemctl daemon-reload
systemctl restart logstash.service
四、Kinana操作
1、初始化操作
访问kibana的5601端口
http://x.x.x.x:5601
1、左侧导航树,Analytics>Overview
2、首次运行,添加一个新的数据
3、添加一个新的索引
创建索引样式时,可以看到今天刚刚已经生成的索引名称,本例中,我们填写
syslog-message-*
来匹配今后所有的索引
2、查看数据
日志在这里哟
开开心心的看日志吧