Zabbix監控平臺的搭建

黃潘發表於2018-11-21

Zabbix簡介

基於Web介面的分散式系統監控的企業級開源軟體。可以監控各種系統與裝置,網路引數,保證伺服器裝置安全運營;提供靈活的通知機制。

Zabbix的特點和功能

1.特點

1)安裝與配置簡單

2)視覺化web管理介面

3)免費開源

4)支援中文

5)自動發現

6)分散式監控

7)實時繪圖

8)email通知

2.主要功能

CPU負荷、記憶體使用、磁碟使用、網路狀況、埠監視、日誌監控

zabbix程式:zabbix_agentd、zabbix_sender、zabbix_get、zabbix_server、zabbix_proxy(和zabbix_jave_gateway)

1.zabbix_agentd:客戶端守護程式,收集客戶端資料,如cpu負載、記憶體、磁碟等使用狀況。

2.zabbix_sender:zabbix工具,用於客戶端傳送資料給server或proxy.通常用於耗時比較長的檢查。為防止zabbix超時,可以在指令碼執行完成後通過sender主動提交資料。

3.zabbix_get:zabbix工具,用於server或proxy獲取客戶端資料。(通常用於排錯,如果server收不到客戶端資料,可以使用zabbix_get獲取資料來做故障排查)

4.zabbix_server:服務端守護程式。其他守護程式最後資料都要提交給zabbix_server

5.zabbix_proxy:zabbix代理守護程式,類似中轉站。

6.zabbix_java_gateway:Java閘道器,類似agentd,但只能用於Java.

所以zabbix監控有兩種模式:

server_agentd模式:簡單,監控主機少。

server-proxy-agentd模式:監控主機多,減輕server壓力。


一/zabbix安裝

yum源配置

rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.9-1.el7.x86_64.rpm


安裝相關軟體

yum install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql mariadb-server mariadb zabbix-agent -y


修改PHP時區配置

vim /etc/httpd/conf.d/zabbix.conf

<Directory “/usr/share/zabbix”>

Options FollowSymLinks

AllowOverride None

Require all granted


<IfModule mod_php5.c>

php_value max_execution_time 300

php_value memory_limit 128M

php_value post_max_size 16M

php_value upload_max_filesize 2M

php_value max_input_time 300

php_value always_populate_raw_post_data -1

php_value date.timezone Asia/Shanghai #修改成Asia/Shanghai

</IfModule>

</Directory>


啟動資料庫

systemctl start mariadb #啟動資料庫

systemctl enable mariadb #設定資料庫開機自啟


建立zabbix所用的資料庫及使用者

mysql

create database zabbix character set utf8 collate utf8_bin;

grant all on zabbix.* to zabbix@`localhost` identified by `123456`;

exit

cd /usr/share/doc/zabbix-server-mysql-3.0.36 zcat create.sql.gz |mysql -uzabbix -p123456 zabbix #匯入資料庫


修改zabbix配置

vim /etc/zabbix/zabbix_server.conf

DBHost=localhost #資料庫所在主機

DBName=zabbix #資料庫名

DBUser=zabbix #資料庫使用者

DBPassword=123456 #資料庫密碼


啟動zabbix及http

systemctl start zabbix-server

systemctl enable zabbix-server

systemctl start httpd

systemctl enable httpd

systemctl start zabbix-agent

systemctl enable zabbix-agent


web介面安裝server

訪問http://ip/zabbix/setup.php


客戶端安裝zabbix-agent

yum install zabbix-agent -y


修改一下引數

vim /etc/zabbix/zabbix_agentd.conf

Server=10.0.0.190 #IP為伺服器IP

ServerActive=10.0.0.190 #IP為伺服器IP

Hostname=10.0.0.190 #IP為伺服器IP


啟動zabbix客戶端

systemctl start zabbix-agent

systemctl enable zabbix-agent


客戶端自動發現與自動註冊功能


修改IP發現範圍


新增自動發現動作



新增自動註冊功能

可以檢視到已經發現兩臺客戶端

在新增了兩臺被監控的主機

二/nginx監控


下載nginx的監控模板

在配置-模板-匯入,新增模板

給主機與模板連結

在zabbix客戶端編寫nginx監控指令碼

cat /etc/zabbix/zabbix_agentd.d/nginx_lzx.sh

#!/bin/bash


HOST=”10.0.0.101″

PORT=”80″


#檢測nginx程式是否存在

function ping {

/sbin/pidof nginx | wc -l

}

# 檢測nginx效能

function active {

/usr/bin/curl “http://$HOST:$PORT/nginx_status/” 2>/dev/null| grep `Active` | awk `{print $NF}`

}

function reading {

/usr/bin/curl “http://$HOST:$PORT/nginx_status/” 2>/dev/null| grep `Reading`| awk `{print $2}`

}

function writing {

/usr/bin/curl “http://$HOST:$PORT/nginx_status/” 2>/dev/null| grep `Writing`| awk `{print $4}`

}

function waiting {

/usr/bin/curl “http://$HOST:$PORT/nginx_status/” 2>/dev/null| grep `Waiting`| awk `{print $6}`

}

function accepts {

/usr/bin/curl “http://$HOST:$PORT/nginx_status/” 2>/dev/null| awk NR==3 | awk `{print $1}`

}

function handled {

/usr/bin/curl “http://$HOST:$PORT/nginx_status/” 2>/dev/null| awk NR==3 | awk `{print $2}`

}

function requests {

/usr/bin/curl “http://$HOST:$PORT/nginx_status/” 2>/dev/null| awk NR==3 | awk `{print $3}`

}

#執行function

$1


修改客戶端zabbix配置檔案,重啟伺服器

vim /etc/zabbix/zabbix_agentd.conf

UnsafeUserParameters=1

UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_lzx.sh $1

systemctl restart zabbix-agent


檢視nginx的監控是否開啟

curl -L http://10.0.0.101/nginx_status

Active connections: 1

server accepts handled requests

288 288 288

Reading: 0 Writing: 1 Waiting: 0


在服務端安裝zabbix測試工具

yum install zabbix-get.x86_64

zabbix_get -s 10.0.0.101 -p 10050 -k “nginx.status[reading]”

0 #伺服器可以獲取到客戶端的監控資料


在服務端可以看到監控引數


三/zabbix郵件告警


編寫指令碼

cat /usr/lib/zabbix/alertscripts/zabbix_sendmail.py

#!/usr/bin/python

#coding:utf-8

import smtplib

from email.mime.text import MIMEText

import sys

mail_host = `smtp.163.com` # 郵箱smtp配置

mail_user = `xxxxxxxxxxx` # 郵箱賬號

mail_pass = `xxxxxxxxxxx` # 郵箱密碼

mail_postfix = `163.com`

def send_mail(to_list,subject,content):

me = “zabbix監控告警平臺”+”<“+mail_user+”@”+mail_postfix+”>”

msg = MIMEText(content, `plain`, `utf-8`)

msg[`Subject`] = subject

msg[`From`] = me

msg[`to`] = to_list

try:

s = smtplib.SMTP()

s.connect(mail_host)

s.login(mail_user,mail_pass)

s.sendmail(me,to_list,msg.as_string())

s.close()

return True

except Exception,e:

print str(e)

return False

if __name__ == “__main__”:

send_mail(sys.argv[1], sys.argv[2], sys.argv[3])


修改指令碼路徑

vim /etc/zabbix/zabbix_server.conf

AlertScriptsPath=/usr/lib/zabbix/alertscripts


給指令碼執行許可權,測試指令碼,如果傳送失敗,可能是網路不通,或者163郵箱的imtp/pop3沒開

chmod +x zabbix-mail.py

chown -R zabbix.zabbix zabbix-mail.py

python zabbix-mail.py xxxxxxxxxx@qq.com test test

檢視當前被監控的主機

將nginx監控項裡的監控時間間隔改為1


在admin使用者中新增報警媒介,郵件報警




zabbix伺服器報警媒介型別

增加三個引數

{ALERT.SENDTO} 收件人地址

{ALERT.SUBJECT} 主題

{ALERT.MESSAGE} 詳細內容

配置報警動作,建立新的觸發動作

配置操作

故障{TRIGGER.STATUS},伺服器:{HOSTNAME1}發生: {TRIGGER.NAME}故障!

告警主機:{HOSTNAME1}

告警時間:{EVENT.DATE} {EVENT.TIME}

告警等級:{TRIGGER.SEVERITY}

告警資訊: {TRIGGER.NAME}

告警專案:{TRIGGER.KEY1}

問題詳情:{ITEM.NAME}:{ITEM.VALUE}

當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

恢復操作

恢復{TRIGGER.STATUS}, 伺服器:{HOSTNAME1}: {TRIGGER.NAME}已恢復!

告警主機:{HOSTNAME1}

告警時間:{EVENT.DATE} {EVENT.TIME}

告警等級:{TRIGGER.SEVERITY}

告警資訊: {TRIGGER.NAME}

告警專案:{TRIGGER.KEY1}

問題詳情:{ITEM.NAME}:{ITEM.VALUE}

當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

你的瀏覽器目前處於縮放狀態,頁面可能會出現錯位現象,建議100%大小顯示。


相關文章