帶你了解zabbix整合ELK收集系統異常日志觸發告警~

今天來了解一下關于ELK的“L”-Logstash,沒錯,就是這個神奇小組件,我們都知道,它是ELK不可缺少的組件,完成了輸入(input),過濾(fileter),output(輸出)工作量,也是我們作為運維人員需要掌握的難點,說到這里 ,又愛又恨;“愛之好,恨之難”;這個Logstash擁有這強大的插件功能,除了幫我們過濾,高效的輸出日志,還能幫我們與Zabbix監控相結合?

因為我們的Logstash支持多種輸出類型,能夠收集web服務日志,系統日志,內核日志;但是;竟然是有日志輸出,肯定避免不了錯誤(error)日志的出現;當Error日志出現的時候,雖然可以通過ELK查找出來,但是ELK不能實時提供報警,這就有點尷尬了,我們要做的就是能夠像zabbix,nagios監控那樣,不能要做到監控,還要做到報警,這一點,ELK只做到了監控,但是沒有做到報警;不過沒關系,我們的Logstash插件能夠與zabbix結合起來,將需要告警 的日志收集起來(比如說有錯誤標識的日志)完成日志監控觸發告警~

logstash支持多種輸出介質,比如說syslog,http,tcp,elasticsearch,kafka等,如果我們將logstash收集的日志輸出到zabbix告警,就必須要用到logstash-output-zabbix插件,通過這個插件將logstash與zabbix整合,logstash收集到的數據過濾出錯誤信息的日志輸出到zabbix中,最后通過zabbix告警機制觸發;

[root@localhost ~]# /usr/local/logstash/bin/logstash-plugin install logstash-output-zabbix      #安裝logstash-output-zabbix插件
Validating logstash-output-zabbix
Installing logstash-output-zabbix
Installation successful

環境案例需求:

通過讀系統日志文件的監控,過濾掉日志信息中的異常關鍵詞,如ERR,error,Failed,warning等信息,將這些帶有異常關鍵詞的異常日志信息過濾出來,然后輸出到zabbix,通過zabbix告警機制實現觸發告警;下面環境是filebeat作為采集端;輸出到kafaka消息隊列,最后由logsatsh拉取日志并過濾,輸出到zabbix

【filebeat】日志采集端

filebeat.inputs:
- type: logenabled: truepaths:- /var/log/secure- /var/log/messages- /var/log/cronfields:log_topic: system_log
processors:- drop_fields:fields: ["beat", "input", "source", "offset", "prospector"] #這里在filebeat中直接去掉不需要的字段。
filebeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: false
name: 192.168.37.147        #這是日志輸出標識,表明日志來自哪個主機,后面再logstash會用到。
output.kafka:enabled: truehosts: ["192.168.37.147:9092", "192.168.37.148:9092", "192.168.37.149:9092"]    #日志輸出到kafka集群version: "0.10"topic: '%{[fields.log_topic]}' partition.round_robin:reachable_only: trueworker: 2required_acks: 1compression: gzipmax_message_bytes: 10000000
logging.level: debug

?

【Logstash端】

?

[root@localhost ~]# vim /usr/local/logstash/config/etc/system_log.conf

input {kafka {bootstrap_servers => "192.168.37.147:9092,192.168.37.148:9092,192.168.37.149:9092"topics => ["system_log"]codec => "json"}
}filter {if [fields][log_topic] == "system_log" {    #指定filebeat產生的日志主題mutate {add_field => [ "[zabbix_key]", "oslogs" ]      #新增的字段,字段名是zabbix_key,值為oslogs。add_field => [ "[zabbix_host]", "%{[host][name]}" ]   #新增的字段,字段名是zabbix_host,值可以在這里直接定義,也可以引用字段變量來獲取。這里的%{[host][name]獲取的就是日志數據的來源IP,這個來源IP在filebeat配置中的name選項進行定義。}}grok {match => { "message" => "%{SYSLOGTIMESTAMP:message_timestamp} %{SYSLOGHOST:hostname} %{DATA:message_program}(?:\[%{POSINT:message_pid}\])?: %{GREEDYDATA:message_content}" } #這里通過grok對message字段的數據進行字段劃分,這里將message字段劃分了5個子字段。其中,message_content字段會在output中用到。}mutate {        #這里是刪除不需要的字段remove_field => "@version"remove_field => "message"}date {      #這里是對日志輸出中的日期字段進行轉換,其中message_timestamp字段是默認輸出的時間日期字段,將這個字段的值傳給 @timestamp字段。match => [ "message_timestamp","MMM  d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]}
}output {if [message_content]  =~ /(ERR|error|ERROR|Failed)/  {   #定義在message_content字段中,需要過濾的關鍵字信息,也就是在message_content字段中出現給出的這些關鍵字,那么就將這些信息發送給zabbix。zabbix {zabbix_host => "[zabbix_host]"      #這個zabbix_host將獲取上面filter部分定義的字段變量%{[host][name]的值zabbix_key => "[zabbix_key]"        #這個zabbix_key將獲取上面filter部分中給出的值zabbix_server_host => "192.168.37.149"  #這是指定zabbix server的IP地址zabbix_server_port => "10051"           #這是指定zabbix server的監聽端口zabbix_value => "message_content"              #定要傳給zabbix監控項item(oslogs)的值, zabbix_value默認的值是"message"字段,因為上面我們已經刪除了"message"字段,因此,這里需要重新指定,根據上面filter部分對"message"字段的內容劃分,這里指定為"message_content"字段,其實,"message_content"字段輸出的就是服務器上具體的日志內容。}}
}

?

[root@localhost logstash]# nohup /usr/local/logstash/bin/logstash -f config/etc/system_log.conf --path.data=/tmp/? ? ? ? ? #這里的--path.data指定詞logstash進程的數據存儲目錄,用于在一個服務器上啟動多個logstash進程環境

[測試]不確定事件配置文件是否正確,我們可以通過前臺運行,輸出stdout;驗證filebeat收集的日志是夠成功的過濾~

stdout {codec => rubydebug}? ? #我們將這條指令加入output輸出端,前臺運行測試,看是夠能夠過濾出來錯誤日志輸出,效果如下~(ok之后記得將這條指令注釋掉并后臺運行哦)

# /usr/local/logstash/bin/logstash -f config/etc/system_log.conf --path.data=/tmp/

【zabbix-監控模板創建到 告警一觸即發】

1.創建模板

將詞模板鏈接到192.168.37.147上,創建的模板上的監控項就會在192.168.37.147上自動生效了,

?

2.創建應用集,點擊應用集-創建應用集

3.創建監控項,點擊監控項,創建監控項

4.告警觸發,創建 觸發器

?

將咱們創建的收集日志的模板連接到 需要收集日志的主機,驗證告警觸發效果

【模擬告警】

ssh連接192.168.37.147日志收集主機,故意輸錯密碼,讓系統產生錯誤日志,驗證是夠發送到zabbix端,下面便是我們過濾的錯誤日志信息,如“error”,"Failed"等~到目前為止,已經成功的收集到錯誤日志輸出了~

?【總結】

首先我們來捋一下思路:

我們的架構基本不變,仍然是filebat收集日志推送到kibana消息隊列,然后由Logstash前去拉取日志數據,經過處理最后中轉出去;只不過是中轉輸出到zabbix上面而已;能夠實現這個功能的,最核心的功臣就是Logsatsh的插件(logstash-output-zabbix);

在這里需要注意的是:filebeat收集端的IP一定要與zabbix監控主機的IP相對應,否則日志是過不來的~

分享一個小技巧:通過該命令可以測試定義在zabbix上的鍵值;出現以下輸出變為正常~,如果failed非零值表示失敗

[root@localhost zabbix_sender]# /usr/local/zabbix/bin/zabbix_sender -s 192.168.37.147 -z 192.168.37.149 -k "oslogs" -o 1
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000081"
sent: 1; skipped: 0; total: 1

詳解:-s:指定本地agent端

-z:指定zabbix服務端

-k:指定鍵值

轉載于:https://www.cnblogs.com/bixiaoyu/p/9595698.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396951.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用python設計學生管理系統_Python實現GUI學生信息管理系統

本文實例為大家分享了Python實現GUI學生信息管理系統的具體代碼,供大家參考,具體內容如下 項目環境: 軟件環境: OS:RedHat6.3 Lib:Pygtk Language:Python Support tool:Glade3 項目簡述: ①Glade3設計用戶的登錄窗口,功…

http響應頭設置

protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 設置響應頭數據response.setHeader(null, "HTTP/1.1 200 OK");response.setHeader("Server", "Apache-Coyote/1.1"…

java用數組實現單詞計數,MapReduce實現單詞計數原理及Java編程:WordCount

MapReduce實現單詞計數:WordCount單詞計數的文本信息(hello.txt):hello can i help youi have a dreammaybe you can help me? 實現過程:? Map過程:并行讀取文本,對讀取的單詞進行Map操作,每個詞將會形成…

python理論知識選擇題_Python基礎自測題答案和基礎知識梳理

Python基礎自測題答案和基礎知識梳理 1.關于Python中的lambda表達式的函數體自能是單獨一條語句,所以答案選擇C。 例如:>>>g lambda x: 2*x1 g(3) 7 2.Python中的變量不需要事先聲明,但是需要創建和賦值,否則你怎么用&a…

STM32f4 ARM Bootloader

參考資料: 基于ARM 的嵌入式系統Bootloader 啟動流程分析 Bootloader 詳解 ( 代碼環境 | ARM 啟動流程 | uboot 工作流程 | 架構設計) Android系統啟動流程 -- bootloader 在main()之前,IAR都做了啥? STM32 IAP程序 源碼 和測試代碼 有詳細的…

查找算法之順序查找

參考: 1. 順序查找 | 博客園 基本思想: 順序查找,就是從第一個元素開始,按索引順序遍歷待查找序列,直到找出給定目標或者查找失敗。 特點: 1. 對待查序列(表)無要求 -- 待查找序列可…

matlab kfda,SVD與KFDA相結合人臉識別-matlab-畢業論文

XXXXxx畢業設計(論文)最高達到88%。當在抽取的特征維數為39,PCA空間的投影維數為110的情況下,隨著訓練樣本個數的增加,LDA的識別情況如表4所示表4 ORL人臉庫LDA測試結果(2)訓練樣本數 識別率/% 識別時間/S3 68.2 52.3594 87.92 31.5315 88.00…

python數據預測_python時間序列預測股票走勢

提示:這只是個訓練模型,技術不具備實際意義,入市需謹慎。 首先調用tushare包 import tushare as ts import pandas as pd import matplotlib.pyplot as plt 查自己比較感興趣的股票,這里我查找的是新能源/燃料電池/氫燃料&#xf…

30.Android之百度地圖簡單學習

今天用了下百度地圖,簡單寫了一個例子,記錄下。 一、申請AK(API Key) 要想使用百度地圖sdk,就必須申請一個百度地圖的api key。申請流程挺簡單的。 首先注冊成為百度的開發者,然后打開http://lbsyun.baidu.…

在datatable中,在指定位置插入列

假如dataset ds 里面已經存在了數據,當我們想在datatable中插入一列數據,可以用以下方法實現:ds.Tables[0].Columns.Add("star");ds.Tables[0].Columns["star"].SetOrdinal(0);這樣“star”列就添加到datatable的第一列了…

python爬取b站彈幕_爬取B站彈幕并且制作詞云

目錄 SRE實戰 互聯網時代守護先鋒,助力企業售后服務體系運籌帷幄!一鍵直達領取阿里云限量特價優惠。 爬取彈幕 1. 從手機端口進入網頁爬取找到接口 2.代碼 import requests from lxml import etree import numpy as np urlhttps://api.bilibili.com/x/v1…

myeclipse始終build workspace

之前我的myeclipse運行某個項目的時候&#xff0c;總是不停的buildworkspace&#xff0c;而且稍微改動一個(不管是java類還是jsp)都會加載接近1分鐘甚至更久&#xff0c;從網上搜了好久&#xff0c;先總結下搜的多數方法 1、叫你去掉.project文件的一段話 <buildCommand>…

python控制燈_Python 控制樹莓派 GPIO 輸出:控制 LED 燈

樹莓派 GPIO 控制輸出的入門應該都是從控制 LED 燈開始的吧。 樹莓派版本&#xff1a;Model 3B 樹莓派系統&#xff1a;Raspbian Stretch with desktop and recommended software&#xff0c;April 2019 連接裝置 準備一個 LED 燈&#xff0c;兩個兩頭都為母的杜邦線。對照下圖…

圖論:弦圖最小點染色

弦圖的定義&#xff1a;當圖中任意長度大于3的環都至少有一個弦時&#xff0c; 一個無向圖稱為弦圖 不存在四角、五角等關系就說明這個圖是一個弦圖 題目問的是&#xff0c;任何一對相互認識的人不可以組一隊&#xff0c;問最多可以組多少對 所有的人構成的關系圖是一個弦圖&am…

報錯型sql注入原理分析

0x00&#xff1a;前言關于sql注入&#xff0c;經久不衰&#xff0c;現在的網站一般對sql注入的防護也相對加強了&#xff0c;2016年的***測試報告中&#xff0c;出現最多的是xss&#xff08;跨站腳本***&#xff09;和明文傳輸等&#xff0c;但是對sql注入的利用方式&#xff0…

matlab矩陣 0,matlab zeros初始化為0矩陣

zeros為創建一個值為零的數組&#xff1b;如matrix1zeros(4,5);%4*5的矩陣&#xff0c;矩陣中每個元素都為0matrix2zeros(4,5,3);%4*5*3的數組&#xff0c;數組中每個元素都為0下面舉一個將圖像存到數組的例子對RGB圖片1.jpg&#xff0c;2.jpg&#xff1b;大小為700*500*3創建4…

HDU 2199

人生中第一道搜索題 精度精度、&#xff01;&#xff01;&#xff01; 1 #include<iostream>2 #include<algorithm>3 #include<cmath>4 #include<cstdio>5 using namespace std;6 double f(double x)7 {8 return 8*pow(x,4.0)7*pow(x,3.0)2*pow(x,…

python文件編譯_編譯Python文件

編譯Python文件 一、編譯Python文件 為了提高加載模塊的速度&#xff0c;強調強調強調&#xff1a;提高的是加載速度而絕非運行速度。python解釋器會在__pycache__目錄中下緩存每個模塊編譯后的版本&#xff0c;格式為&#xff1a;module.version.pyc。通常會包含python的版本號…

SDN-博客收集

1、云網融合的多云網絡轉載于:https://www.cnblogs.com/snowwhite/p/9624404.html