一、平台背景

现在常用的日志统一汇总系统日志平台有几种:ELK、graylog或syslog-ng + 二次开发、ELK相关组件二次开发等。本篇的重点主要关注需要收集日志的一端。开始之前,先说下需求:现网有设备基本有5000台左右,系统运维和应用运维是分开来的。所以站在系统运维的角度来说,一般只关心和OS及系统自带的软件部分的报错。应用的日志不需要去管。所以这里设计的简单架构如下:

rsyslog-elk
rsyslog-elk

二、架构设计

如果把主机上的所有日志*.*全部发送给服务器端,客户端确实是省事了,不过这会增加服务端的数据存储量,所以这里选择使用 kern.*;*.warn只收集有关告警以上级别和kernel级的日志,这就过滤掉了大部分的日志。我们按每台每天平均假设有1000条这样的消息(实际主机上不出问题,基本是不会产生此类日志的),5000台主机30天的数据也就是1000 * 5000 * 30 = 1亿5千万条,这个记录对于数据库来说并不算多。

这部分日志这里选择直接使用linux上自带的rsyslog进行处理,并通过tcp或udp传给logstash(也可以在主机安装filebeat,通过filebeat直接实入elasticsearch),这样做的好处是省去了再安装其他软件的麻烦。几千台机器同时传给logstash如果感觉处理的慢了,可以增加kafaka或redis进行缓存。这样做还有一个好处,就是有些主机如果发送的有某些无意义的告警,可以再加上关键字过滤进行排除。

入Elasticsearch库后,可以选择的前台展示方式,可以选择Kibana也可以选择Rraylog(开源版有限制)。同时告警也可以使用ELK中的sentinl组件实现。

三、demo配置

这里给出个大框架型的配置方法,现网使用的时候可以根据具体情况调整。

1、rsyslog配置

1# cat /etc/rsyslog.d/systemlog.conf
2kern.*;*.warn  /var/log/kern.log
3kern.*;*.warn  @10.212.52.18:514

上面不想要本地输出,也可以去掉本地输出,直接指定到远程主机就可以了。这里我选择了使用udp传输,也可以使用tcp进行传输。

2、ELK套件安装

 1[root@localhost elk]# rpm -ivh elasticsearch-7.4.2-x86_64.rpm
 2Preparing...                          ################################# [100%]
 3Creating elasticsearch group... OK
 4Creating elasticsearch user... OK
 5Updating / installing...
 6   1:elasticsearch-0:7.4.2-1          ################################# [100%]
 7### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 8 sudo systemctl daemon-reload
 9 sudo systemctl enable elasticsearch.service
10### You can start elasticsearch service by executing
11 sudo systemctl start elasticsearch.service
12future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/jdk-10.0.2] does not meet this requirement
13Created elasticsearch keystore in /etc/elasticsearch
14[root@localhost elk]# rpm -ivh kibana-7.4.2-x86_64.rpm
15Preparing...                          ################################# [100%]
16Updating / installing...
17   1:kibana-7.4.2-1                   ################################# [100%]
18[root@localhost elk]# rpm -ivh logstash-7.4.2.rpm
19Preparing...                          ################################# [100%]
20Updating / installing...
21   1:logstash-1:7.4.2-1               ################################# [100%]
22Using provided startup.options file: /etc/logstash/startup.options
23Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
24/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.30/lib/pleaserun/platform/base.rb:112: warning: constant ::Fixnum is deprecated
25Successfully created system startup script for Logstash

上面可以看到elasticsearch对java版本比较挑剔,这里使用的java10还提示版本低,后面换用了最新的java13。

3、ELK配置

 1-- elasticsearch配置
 2# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
 3# grep -vE '#|^$' /etc/elasticsearch/elasticsearch.yml
 4cluster.name: elk
 5node.name: elk01
 6path.data: /var/lib/elasticsearch
 7path.logs: /var/log/elasticsearch
 8network.host: 0.0.0.0
 9http.port: 9200
10cluster.initial_master_nodes: ["elk01"]
11# systemctl restart elasticsearch.service
12# curl 127.0.0.1:9200
13-- kibana 配置及启动
14# cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
15# grep -vE '#|^$' /etc/kibana/kibana.yml
16server.host: "0.0.0.0"
17i18n.locale: "zh-CN"
18# systemctl restart kibana.service
19-- logstash配置
20# systemctl restart kibana.service
21# cat conf.d/system.conf         #新建一个监控系统日志的配置文件
22input {
23    tcp {
24        port => 514
25        type => syslog
26    }
27    udp {
28        port => 514
29        type => syslog
30    }
31}
32output {
33    elasticsearch {
34    hosts => ["localhost:9200"]
35    index => "logstash-systemlog-%{+YYYY.MM.dd}"
36    }
37    stdout {  }
38}
39
40上面的标准输出也可以去掉,调试的时候比较有用
41可以看到如下命令,使用此命令启动:
42# /usr/share/logstash/bin/logstash --path.settings /etc/logstash

登陆 kibana web 控制台:http://:5601 ,【管理】-【索引模式】-【创建索引模式】,在【索引模式】文本框中输入system-log,在下面可以看到【成功!您的索引模式匹配 1 个索引。】,然后点击【下一步】, 在【时间筛选字段名称】中选择 【@timestamp】,点击【创建索引模式】,然后点击面板的【Discover】,即可看到日志信息

kibana-discover
kibana-discover

以上就先暂时建好了统一日志管理的雏形,后面要做的工作还有很多,比如:关键字匹配并告警、日志保存的时间长短、如何图形展示、logstash性能不足时,传输给redis(内存级)或kafka(磁盘级)并再中转给logstash等。