分佈式監控-zabbix(3.0-4.0)

zabbix server端:centos7.6
php

1、關閉防火牆和selinux、設置時區和時間同步
python

~]# systemctl stop firewalldmysql

~]# systemctl disable firewalldlinux

~]# setenforce 0nginx

~]# vim /etc/sysconfig/selinuxweb

SELINUX=disabled                       #將enforcing更改成disabledsql

# timedatectl set-timezone Asia/Shanghai數據庫

~]# yum -y install chronyjson

~]# vim /etc/chrony.confvim

server ntp1.aliyun.com iburst                #修改成阿里雲的ntp服務器

~]# systemctl restart chronyd


2、更換爲yum源爲阿里雲源

~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

~]# yum makecache


3、安裝LAMP環境

~]# yum -y install mariadb mariadb-server httpd php php-mysql

~]# systemctl start httpd mariadb

~]# systemctl enable httpd mariadb

~]# mysql_secure_installation


4、安裝zabbix程序,此處選用3.0 LTS(長期維護版)

~]# rpm -Uvh https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

~]# yum clean all

~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

初始化數據庫:

~]# mysql -uroot -p

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';              #此處password爲zabbix的數據庫密碼,自行設置

MariaDB [(none)]> quit;

~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix                 #輸入zabbix用戶的密碼

~]# vim /etc/zabbix/zabbix_server.conf

DBPassword=password                                  #輸入zabbix用戶的密碼

~]# vim /etc/httpd/conf.d/zabbix.conf     

php_value date.timezone Asia/Shanghai            #輸入正確的時區信息

~]# systemctl restart zabbix-server zabbix-agent httpd

~]# systemctl enable zabbix-server zabbix-agent httpd


5、瀏覽器初始化zabbix的web

~]# vim /etc/httpd/conf/httpd.conf

DocumentRoot "/usr/share/zabbix"  

~]# systemctl restart httpd

訪問http://server-ip,默認帳號爲Admin,密碼爲zabbix。生產環境注意:一、修改Admin密碼;二、關閉guest用戶。

image.pngimage.png                 



6、因爲3.0的不少模板支持的問題,因此此處升級爲4.0LTS。

阿里雲的zabbix倉庫源包:

https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm

具體參考官方升級指南:

https://www.zabbix.com/documentation/4.0/zh/manual/installation/upgrade/packages/rhel_centos



7、添加對中文的支持,避免中文亂碼問題:3.0和4.0的區別:3.0路徑:/usr/share/zabbix/fonts/      4.0路徑:/usr/share/zabbix/assets/fonts/

如下示例爲4.0LTS版本

找一臺windows主機:win+R,輸入fonts(即C:\Windows\Fonts),選擇某一字體(此處示例爲:宋體常規)

經過拖動上傳字體文件到zabbix-server上:前提 ~]# yum -y install lrzsz

~]# mv simsun.ttc /usr/share/zabbix/assets/fonts/song.ttf

~]# chmod a+x /usr/share/zabbix/assets/fonts/song.ttf

~]# vim /usr/share/zabbix/include/defines.inc.php

define('ZBX_GRAPH_FONT_NAME',           'song');                 #將字體graphfont修改成song




經常使用監控方式:

1、經過agent監控:

一、安裝zabbix-agent程序和設置配置文件

centos 7

~]# rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.15-1.el7.x86_64.rpm

~]# vim /etc/zabbix/zabbix_agentd.conf

Server=172.20.120.214                              #設置server端IP

#ServerActive=172.20.120.214                  #此處沒有啓用active模式,因此註釋(active模式是客戶端主動發送數據給server端) 

Hostname=172.20.120.182                       #設置客戶端的名稱

~]# systemctl start zabbix-agent

~]# systemctl enable zabbix-agent


centos6

~]# sudo rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/6/x86_64/zabbix-agent-4.0.15-1.el6.x86_64.rpm

~]# hostip=`ip addr l | grep eth0 | grep inet | awk -F "/" '{print $1}' | awk '{print $2}'`                                       #此處獲取網卡爲eth0,請按需修改

~]# sudo sed -i -e 's/Server=127.0.0.1/Server=172.20.120.214/g' -e 's/ServerActive=127.0.0.1/#ServerActive=127.0.0.1/g' -e "s/Hostname=Zabbix server/Hostname=$hostip/g" /etc/zabbix/zabbix_agentd.conf

~]# sudo service zabbix-agent start

~]# sudo chkconfig zabbix-agent on



二、添加到web監控的模式:

a、手動添加

訪問web端http://server-ip:配置-主機-建立主機-設置主機相關信息:如圖

image.png

image.png


b、自動發現

步驟:

一、設置自動發現後要進行的動做

訪問web端http://server-ip:配置-動做-事件源(自動發現)-建立動做

二、設置自動發現規則

訪問web端http://server-ip:配置-自動發現-建立發現規則


Zabbix監控nginx性能

一、查看是否有with-http_stub_status_module該模塊

~]# nginx -V     

二、配置nginx狀態頁面            

~]# vim /etc/nginx/nginx.conf

location /ngx_status  {

stub_status on;

access_log off;

allow 127.0.0.1;

}

~]# systemctl reload nginx

測試是否能夠獲取到status頁面

~]# curl http://127.0.0.1/ngx_status

其中字段解釋以下:

Active connections               :表示Nginx正在處理的活動鏈接數。

server                                   :表示Nginx啓動到如今共處理了多少個鏈接

accepts                                 :表示Nginx啓動到如今共成功建立多少次握手

handled requests                 :表示總共處理了 多少次請求

Reading                                :Nginx 讀取到客戶端的 Header 信息數

Writing                                 :Nginx 返回給客戶端 Header 信息數

Waiting                                 :Nginx 已經處理完正在等候下一次請求指令的駐留連接(開啓keep-alive的狀況下,這個值等於Active-(Reading+Writing))

因此,在訪問效率高,請求很快被處理完畢的狀況下,Waiting數比較可能是正常的.若是reading +writing數較多,則說明併發訪問量很是大,正在處理過程當中。

三、編寫監控腳本

~]# vim /etc/zabbix/ngx_status.sh

#!/bin/bash

HOST="127.0.0.1"

PORT="80"

#檢測nginx進程是否存在

function ping {

        /sbin/pidof nginx | wc -l

}

#檢測nginx性能

function active {

        /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | grep 'Active' | awk '{print $NF}'

}

function reading {

        /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | grep 'Reading' | awk '{print $2}'

}

function writing {

        /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | grep 'Writing' | awk '{print $4}'

}

function waiting {

        /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | grep 'Waiting' | awk '{print $6}'

}

function accepts {

        /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | awk NR==3 | awk '{print $1}'

}

function handled {

        /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | awk NR==3 | awk '{print $2}'

}

function requests {

        /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | awk NR==3 | awk '{print $3}'

}

#執行function

$1

~]# chmod a+x /etc/zabbix/ngx_status.sh

測試腳本

~]# bash /etc/zabbix/ngx_status.sh requests

image.png

四、zabbix-agent配置文件

~]# vim /etc/zabbix/zabbix_agentd.conf

UnsafeUserParameters=1

UserParameter=nginx.status[*],/etc/zabbix/ngx_status.sh $1

~]# systemctl restart zabbix-agent

~]# systemctl enable zabbix-agent

zabbix server端測試

~]# yum -y install zabbix-get

~]# zabbix_get  -s 172.20.120.56 -k 'nginx.status[accepts]'             #-s後接agent-ip,-k後接自定義key

image.png

五、zabbix web端

下載模板:https://pan.baidu.com/s/1CCaIURk-kXAcEXJ6BD-TEA

導入模板

主機配置

主機添加模板(Template App NGINX)


2、經過snmp方式監控:

Zabbix監控Dell服務器硬件(iDRAC)

一、Dell服務器端

瀏覽器登陸iDRAC

啓用SNMP
點擊「iDRAC」——「網絡」——「服務」——「SNMP代理」
勾選「已啓用」,而後點擊「應用」

二、zabbix web端

下載模板:https://pan.baidu.com/s/1CCaIURk-kXAcEXJ6BD-TEA

導入模板

主機配置SNMP interfaces

主機添加模板Dell iDRAC;注意點:宏的設置須要對應起來(即SNMP community的值要對應起來)。


zabbix監控華爲交換機和防火牆設備

一、在交換機和防火牆開啓snmp功能,和設置SNMP community

二、zabbix web端

下載模板:https://pan.baidu.com/s/1CCaIURk-kXAcEXJ6BD-TEA

導入模板

主機配置SNMP interfaces

主機添加模板(Template Net Huawei VRP SNMPv2)注意點:宏的設置須要對應起來(即SNMP community的值要對應起來)。




windows服務器的監控:

一、安裝agent客戶端;官網下載地址https://assets.zabbix.com/downloads/4.0.15/zabbix_agents-4.0.15-win-amd64-openssl.zip

解壓zabbix_agents-4.0.15-win-amd64-openssl.zip

conf目錄存放是agent配置文件 

bin文件存放windows下程序

修改conf目錄下的zabbix_agentd.conf文件

    LogFile=c:\zabbix_agentd.log    //日誌存放位置

    EnableRemoteCommands=1     //容許在本地執行遠程命令

    LogRemoteCommands=1          //執行遠程命令是否保存操做日誌

    Server=172.20.120.214          //zabbix_server主機IP地址

    #ServerActive=192.168.1.10        //因爲沒有開啓active模式,所以註釋便可

    Hostname=******         //被監控主機名,自身主機名

打開命令提示符進行安裝

c:\zabbix\bin\zabbix_agentd.exe -i -c c:\zabbix\conf\zabbix_agentd.conf

c:\zabbix\bin\zabbix_agentd.exe -s -c c:\zabbix\conf\zabbix_agentd.conf

完成安裝後,服務裏就有了zabbix-agent服務

最後記得設置防火牆容許zabbix-agent互聯


windows補充點:

默認windows模板沒有cpu使用率監控項,添加以下:

名稱:CPU usage%

鍵值:perf_counter[\Processor(_Total)\% Processor Time]

信息類型:浮點數

單位:%

問題:沒法獲取cpu使用率,server端日誌:Collector is not started

解決方法:重建性能計數器設置:管理員執行下lodctr /R命令便可




設置報警方式:

1、郵件報警:

一、管理--報警媒介類型--建立媒體類型

image.png

二、管理--用戶--報警媒介--添加

image.png

三、配置--動做--事件源:觸發器--建立動做

image.png

操做內容以下:

故障{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}



更新操做內容以下:

更新信息:{EVENT.NAME}
更新信息:
{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
{EVENT.UPDATE.MESSAGE}
Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.


最後進行故障測試,驗證是否發送成功。查看:報表--動做日誌


2、阿里雲短信報警:此處示例使用python3.6+(python2存在中文短信亂碼的狀況)

一、CentOS7 升級Python2.x到3.x

~]# python -V        #查看當前python版本

~]# yum -y install python3

~]# mv /usr/bin/python /usr/bin/python.bak

~]# ln -sv /usr/bin/python3 /usr/bin/python

爲了兼容yum:修改/usr/bin/yum和/usr/libexec/urlgrabber-ext-down文件,將 #!/usr/bin/python 改成 #!/usr/bin/python2.7

二、安裝阿里雲SDK核心庫:

~]# pip3 install aliyun-python-sdk-core

三、阿里雲短信服務,申請短信簽名和模板:此處傳遞三個參數:${host},${time},${item}。

image.png

四、編寫python腳本,並測試

~]# vim /usr/lib/zabbix/alertscripts/sendsms.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-


from aliyunsdkcore.client import AcsClient

from aliyunsdkcore.request import CommonRequest

import sys

client = AcsClient('<accessKeyId>', '<accessSecret>','default')                #此處填寫accesskey信息,其獲取地址:https://usercenter.console.aliyun.com


request = CommonRequest()

request.set_accept_format('json')

request.set_domain('dysmsapi.aliyuncs.com')

request.set_method('POST')

request.set_protocol_type('https') # https | http

request.set_version('2017-05-25')

request.set_action_name('SendSms')


#如下將zabbix傳遞的第一個參數爲發送人號碼,並將第二個參數message信息,切割爲3個變量:host、time、item

string = sys.argv[2]

phone_number = sys.argv[1]

message = string.split(";")

dict1 = { }

dict1['host'] = message[0]

dict1['time'] = message[1]

dict1['item'] = message[2]


request.add_query_param('RegionId',"cn-hangzhou")

request.add_query_param('PhoneNumbers',phone_number)

request.add_query_param('SignName',"簽名名稱")                                               #填寫申請的簽名名稱

request.add_query_param('TemplateCode',"模版CODE")                                      #填寫申請的模版CODE

request.add_query_param('TemplateParam',dict1)


response = client.do_action(request)

# python2:  print(response) 

print(str(response, encoding = 'utf-8'))

~]# chmod a+x /usr/lib/zabbix/alertscripts/sendsms.py

~]# python  /usr/lib/zabbix/alertscripts/sendsms.py  手機號碼 '官網;18:03;test'            #參數1:手機號碼;參數2:3個參數用;號隔開

image.png

五、zabbix web端設置

管理--報警媒介類型--建立媒體類型

image.png

管理--用戶--報警媒介--添加

image.png

配置--動做--事件源:觸發器--建立動做

消息內容:

{TRIGGER.NAME}:{TRIGGER.KEY1};{EVENT.TIME};{TRIGGER.STATUS}

image.png

最後進行故障測試,驗證是否發送成功。查看:報表--動做日誌


3、釘釘羣報警:

官方參考文檔:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

一、釘釘建羣,添加自定義webhook機器人,複製webhook地址;注意新版釘釘有安全設置。示例選擇自定義關鍵字:監控

二、創建腳本

~]# vim /usr/lib/zabbix/alertscripts/dingding.sh

#!/bin/bash

to=$1

subject=$2

text=$3

curl 'webhook地址' \                                                           #此處的地址爲機器人的webhook地址

-H 'Content-Type: application/json' \

-d '

{"msgtype": "text",

"text": {

"content": "'"$text"'"

},

"at":{

"atMobiles": [ "'"$1"'" ],

"isAtAll": false

}

}'

~]# chmod a+x /usr/lib/zabbix/alertscripts/dingding.sh

~]# chown zabbix:zabbix /usr/lib/zabbix/alertscripts/dingding.sh

~]# bash /usr/lib/zabbix/alertscripts/dingding.sh 1 2 監控                    #第三個參數必須包含自定義關鍵字,不然失敗

三、同上設置報警媒介、用戶和動做。

腳本參數按次序分別是:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}

消息內容同郵件報警一致便可

收件人填寫手機號碼便可

最後進行故障測試,驗證是否發送成功。查看:報表--動做日誌

相關文章
相關標籤/搜索