文章目录
1.概述
本文描述将网络日志(会话日志,操作日志等)以syslog方式保存到elk日志服务器集群中及日志展示的实现。
2.日志源配置
首先对日志源即网络设备进行配置,以下列举华为防火墙及交换设备
1.防火墙开启日志
防火墙日志配置(另在策略中也要开启日志记录功能,图略)
2.交换机开启日志
info-center source default channel 4 log level error
info-center loghost 192.168.171.7 channel 4 local-time
info-center trapbuffer channel 4
3.日志主机配置
该主机上主要安装了rsyslog,docker及filebeat(docker版本)组件
1.rsyslog配置
- 安装请用yum
- 配置rsyslog模板
由于生产中需要收集不同网络设备的日志,因此这里用不通网络设备的ip建立目录及各自的日志
$template diff_ip,“/var/log/network-log/%fromhost-ip%/messages-%$now%.log”
if $fromhost-ip != ‘127.0.0.1’ then ?diff_ip
#local7.* /var/log/boot.log
local7.* ?diff_ip
当配置完上面的模板,rsyslog收到日志源的数据后,会产生如下临时日志,结构如模板设置一样
- 启动服务
systemctl start rsyslog
2.docker及filebeat配置
- yum安装docker
- 拉取filebeat镜像
###拉取filebeat镜像文件
docker pull docker.elastic.co/beats/filebeat:7.10.0
###将提前准备好filebeat.yml文件放置在/etc/zabbix/docker_vol/下
###按照以下命令及参数,运行filebeat,注意这里需要将宿主机系统的部分文件挂载到filebeat容器中,由于filebeat读取的是宿主机上rsyslog的日志文件,因此还需要将filebeat.yml中的日志来源目录也挂载到容器的目录中,这都在下面的命令中体现
docker run -d --name=network-sys --user=root --volume=“/etc/zabbix/docker_vol/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro” --volume=“/var/lib/docker/containers:/var/lib/docker/containers:ro” --volume=“/var/run/docker.sock:/var/run/docker.sock:ro” --volume=“/var/log/network-log:/var/log/network-log:ro” docker.elastic.co/beats/filebeat:7.8.1 filebeat -e -strict.perms=false
- filebeat.yml如下,这里往es导入日志后是按天生成es的index
filebeat.inputs:
#- type: syslog
- type: log
# protocol.udp:
# host: "192.168.171.7:5140"
encoding: gbk
paths: '/var/log/network-log/*/*.log'
#output.console:
# string:
processors:
- add_tags:
when:
regexp:
log.file.path: "10.222.222.[2,3]{1,1}"
tags: ["FT2Q-FW"]
- add_tags:
when:
regexp:
log.file.path: "10.100.1.[2,3]{1,1}/"
tags: ["FT1Q-FW"]
- add_tags:
when:
regexp:
log.file.path: "10.100.1.[1][9]|10.100.[2][0]"
tags: ["FT3Q-FW"]
- add_tags:
when:
regexp:
log.file.path: "10.100.1.[1][0]|10.100.1,[1][1]"
tags: ["SJHL-FW"]
- add_tags:
when:
regexp:
log.file.path: "192.168.171.1"
tags: ["FT1Q-core"]
output.elasticsearch:
hosts: ["192.168.170.108:9201", "192.168.170.109:9201", "192.168.170.112:9201"]
username: "elastic"
password: "elastic_PASS"
index: "network-%{[agent.version]}-%{+yyyy.MM.dd}"
# indices:
# - index: "network-ft1q-%{[agent.version]}-%{+yyyy.MM.dd}"
# when:
# or:
# - contains:
# source: 10.222.222.2
# - contains:
# source: 10.100.1.3
# - index: "network-ft3q-%{[agent.version]}-%{+yyyy.MM.dd}"
# when.contains:
# - index: "network-sjhl-${[agent.version]}-%{+yyyy.MM.dd}"
setup.template.name: "network-log"
setup.template.pattern: "network-*"
setup.template.enabled: true
setup.ilm.enabled: false
- docker方式启动filebeat
docker run -d --name=network-sys --user=root --volume="/etc/zabbix/docker_vol/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" --volume="/var/log/network-log:/var/log/network-log:ro" docker.elastic.co/beats/filebeat:7.8.1 filebeat -e -strict.perms=false
4.elk配置
日志是通过日志服务器,转发到es集群上面的,但是我这里主要是在kibana上进行配置。
- 创建索引(index)模板
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020111511173570.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lxOTAxMjU=,size_16,color_FFFFFF,t_70#pic_center - 在discover中可通过索引模式(就是上面的索引模板)的选择看到收集到的日志
5.日志清理
这里的日志清理分为两步,一步是清理rsyslog中的日志,还有一步是对es集群主机中的index做生命周期的设置
1.rsyslog清理
- 在rsyslog服务器(=filebeat也在这上面=)先定制删除日志的脚本auto_remove_log.py,放置的目录如下
/etc/zabbix/zabbix_script/auto_remove_log.py
#! /usr/bin/python
import os,re,time
file_dir = '/var/log/network-log'
list_dir = os.listdir(file_dir)
list_dir_sub_layer=[]
for dir_name in list_dir:
list_dir_sub_layer.append(file_dir+'/'+dir_name)
list_dir_file = []
for dir_name in list_dir_sub_layer:
list_dir = os.listdir(dir_name)
for k in list_dir:
list_dir_file.append(dir_name+'/'+k)
len_list = len(list_dir_file)
begin_time = time.strftime("%Y-%m-%d",time.localtime(time.time()-86400))
cu_time = time.strftime("%Y-%m-%d",time.localtime())
for i in range(0,len_list):
if re.search(begin_time,list_dir_file[i]) or re.search(cu_time,list_dir_file[i]):
pass
else:
os.remove(list_dir_file[i])
- 部署了上面的脚本后,还需要用crontab定时执行,这里计划为每天早8点执行一次脚本
0 8 * * * /usr/bin/python /etc/zabbix/zabbix_script/auto_remove_log.py
2.ES生命周期管理
日志不仅要在rsyslog日志服务器上进行定期清理,在es集群中也要进行生命周期的设置
- 生命周期策略创建
2. 挂接到index