使用elk收集網絡設備的案例

簡介

隨着機房內的服務器和網絡設備增長,日誌管理和查詢就成了讓系統管理員頭疼的事。node

系統管理員遇到的常見問題以下:

  1. 平常維護過程當中不可能登陸到每一臺服務器和設備上去查看日誌;
  2. 網絡設備上的存儲空間有限,不可能存儲日期太長的日誌,而系統出現問題又有多是好久之前發生的某些操做形成的;
  3. 在某些非法侵入的狀況下,侵入者通常都會清除本地日誌,清除侵入痕跡;
  4. zabbix等監控系統沒法代替日誌管理,沒法監控如系統登陸、計劃任務執行等項目。

基於上述緣由,在當前的網絡環境中搭建一臺用於日誌集中管理的Rsyslog日誌服務器就顯得十分有必要了。linux

Rsyslog服務的優勢以下:

  1. Rsyslog服務器能夠大多數的網絡設備支持,在網絡設備的系統設備選項中大多都有遠程日誌服務的配置選項。只須要填寫上IP地址和端口(大多數設備已經默認是514了),而後肯定就能夠了;
  2. Linux服務器只須要在本地的Rsyslog服務配置中加入簡單的一行就能夠將日誌發送到日誌服務器,佈署和配置起來十分簡單;
    部署架構

部署架構

使用elk收集網絡設備的案例

Rsyslog配置

系統環境及軟件版本:
CentOS Linux release 7.5.1804 (Core)
Elasticserch-6.8.4
Kibana-6.8.4
Logstash-6.8.4
Filebeat-6.8.4
Rsyslog-8.24.0

將SELINUX設置爲disabled

# setenforce 0
# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

防火牆配置

firewall-cmd  --add-service=syslog --permanent
firewall-cmd  --reload

檢查是否安裝了rsyslog軟件

#CentOS7默認會安裝rsyslog vim

[root@ZABBIX-Server ~]# rpm -qa |grep rsyslog
rsyslog-8.24.0-16.el7.x86_64

編輯rsyslog配置文件

vim /etc/rsyslog.conf #按以下進行更改 ruby

[root@ZABBIX-Server mnt]# egrep -v "*#|^$" /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none;local6.none;local5.none;local4.none                /var/log/messages
$template h3c,"/mnt/h3c/%FROMHOST-IP%.log"
local6.* ?h3c
$template huawei,"/mnt/huawei/%FROMHOST-IP%.log"
local5.* ?huawei
$template cisco,"/mnt/cisco/%FROMHOST-IP%.log"
local4.* ?cisco

使用elk收集網絡設備的案例

$ModLoad imudp            # immark是模塊名,支持tcp協議  
$ModLoad imudp             # imupd是模塊名,支持udp協議    
$InputTCPServerRun 514
$UDPServerRun 514          #容許514端口接收使用UDP和TCP協議轉發過來的日誌

注意:服務器

*.info;mail.none;authpriv.none;cron.none;local6.none;local5.none;local4.none         /var/log/messages
默認沒有添加local6.none;local5.none;local4.none 命令,網絡日誌在寫入對應的文件的同時會寫入/var/log/messages 中

檢查rsyslog服務

使用elk收集網絡設備的案例

重啓rsyslog服務

systemctl restart rsyslog.service

日誌存放目錄

使用elk收集網絡設備的案例

網絡設備將日誌指向syslog服務器,注意不一樣廠商的設備對應的local不一樣,對應關係以下:網絡

/mnt/huawei   --- local6
/mnt/h3c      --- local5
/mnt/cisco     --- local4

網絡設備配置

Huawei:
info-center loghost source Vlanif99
info-center loghost 192.168.99.50 facility local5

H3C:
info-center loghost source Vlan-interface99
info-center loghost 192.168.99.50 facility local6

CISCO:
(config)#logging on
(config)#logging 192.168.99.50 
(config)#logging facility local4
(config)#logging source-interface e0

Ruijie:
logging buffered warnings
logging source interface VLAN 99
logging facility local6
logging server 192.168.99.50

注意:192.168.99.50爲rsyslog服務器的IP架構

編輯filebeat配置文件

收集rsyslog下的日誌文件到logstashelasticsearch

[root@ZABBIX-Server mnt]# egrep -v "^#|^$" /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /mnt/huawei/*
  tags: ["huawei"]
  include_lines: ['Failed','failed','error','ERROR','\bDOWN\b','\bdown\b','\bUP\b','\bup\b']
  drop_fields:
    fields: ["beat","input_type","source","offset","prospector"]
- type: log
  paths:
    - /mnt/h3c/*
  tags: ["h3c"]
  include_lines: ['Failed','failed','error','ERROR','\bDOWN\b','\bdown\b','\bUP\b','\bup\b']
  drop_fields:
    fields: ["beat","input_type","source","offset","prospector"]
setup.template.settings:
  index.number_of_shards: 3
output.logstash:
  hosts: ["192.168.99.185:5044"]
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

編輯logstash配置文件

對filebeat傳來的日誌根據標籤不一樣分別進行處理,將處理完成的日誌數據傳到es上存儲,並在kibana上作進一步的可視化展現tcp

[root@elk-node1 ~]# egrep -v "^#|^$" /etc/logstash/conf.d/networklog.conf
input {
  beats {
    port => 5044
  }

}
filter {
  if "huawei" in [tags] {
    grok{
      match => {"message" => "%{SYSLOGTIMESTAMP:time} %{DATA:hostname} %{GREEDYDATA:info}"}
        }
  }
   else if "h3c" in [tags] {
    grok{
      match => {"message" => "%{SYSLOGTIMESTAMP:time} %{YEAR:year} %{DATA:hostname} %{GREEDYDATA:info}"}
        }
  }
mutate {
      remove_field => ["message","time","year","offset","tags","path","host","@version","[log]","[prospector]","[beat]","[input][type]","[source]"]
    }
}
output{
stdout {codec => rubydebug}
elasticsearch {
    index => "networklogs-%{+YYYY.MM.dd}"
    hosts => ["192.168.99.185:9200"]
    sniffing => false
    }
}

在kibana上作可視化配置

建立一個索引模式匹配存儲的網絡設備日誌索引
使用elk收集網絡設備的案例 ide

建立一個數據表

使用elk收集網絡設備的案例

kibana的數據表能夠導出爲CSV文件
使用elk收集網絡設備的案例

建立一個餅狀圖

使用elk收集網絡設備的案例
使用elk收集網絡設備的案例


歡迎關注我的公號「沒有故事的陳師傅」

使用elk收集網絡設備的案例

相關文章
相關標籤/搜索