ZABBIX-實戰項目


為什么要監控

監控是整個運維乃至整個產品生命周期中重要的一環,事前及時預警發現故障,事后提供詳實的數據用於追查定位問題。

對系統不間斷實時監控
實時反饋系統當前狀態
保證服務可靠性安全性
保證業務持續穩定運⾏

企業常見監控工具

cacti:擅長出圖,添加監控項很繁瑣
nagios:可以添加監控項,但不可圖形化
ganglia:分布式集群監控系統,適合於對上千台大型規模集群進行監控,性能成本比較低,批量管理更加方便,但不支持告警。
zabbix:基於web,提供分布式方式監控網絡和系統參數,出圖美觀,支持告警
promethus:適合於監控k8s
ELK:日志監控

zabbix工作原理

Agentd安裝在被監控的主機上,Agent負責定期收集客戶端本地各項數據,並發送至Zabbix Server端,Zabbix Server收到數據,將數據存儲到數據庫中,用戶基於Zabbix WEB可以看到數據在前端展現圖像。
 當Zabbix監控某個具體的項目,該項目會設置一個觸發器閾值,當被監控的指標超過該觸發器設定的閾值,會進行一些必要的動作,動作包括:發送信息(郵件、微信、短信)、發送命令(SHELL 命令、Reboot、Restart、Install等)

1.硬件監控 路由器、交換機、防⽕牆、服務器
2.系統監控 Windows/Linux CPU、內存、磁盤、⽹絡、進程、TCP
3.服務監控 nginx、php、tomcat、redis、memcache、mysql
4.WEB監控 請求時間、響應時間、加載時間、
5.⽇志監控 ELk(收集、存儲、分析、展示) ⽇志易、阿里雲日志系統
6.安全監控 Firewalld(限制來源的ip)、WAF(Nginx+lua)、安全寶、⽜盾雲、安全狗
7.⽹絡監控 smokeping 多機房、監控寶、全國各地實時延遲
8.業務監控 活動引⼊多少流量、產⽣多少注冊量、帶來多⼤價值

安裝部署環境

安裝部署服務端

1.關閉防火牆和禁用selinux

systemctl stop firewalld
systemctl disable firewalld
sed -i "s/SELINUX=.*/SELINUX=Disabled/" /etc/selinux/config
setenforce 0

或者放行相關端口:

firewall-cmd --permanent --zone=public --add-port=10050/tcp
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=10051/tcp
firewall-cmd --reload

2.安裝zabbix5.0的rpm源
官方源地址:

repo.zabbix.com
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
yum clean all

3.安裝軟件包
安裝 zabbix server 和 agent

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

安裝 Software Collections,便於后續安裝高版本的 php,默認 yum 安裝的 php 版本為 5.4 過低

yum install centos-release-scl -y

啟用 zabbix 前端源,修改vi /etc/yum.repos.d/zabbix.repo,將[zabbix-frontend]下的 enabled 改為 1

[zabbix-frontend]
...
enabled=1
...

安裝 zabbix 前端和相關環境

yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl -y

數據庫安裝
1.安裝mariadb數據庫

yum install mariadb-server -y
systemctl enable --now mariadb

mariadb設置root密碼

mysqladmin -uroot password admin

使用 root 用戶進入 mysql,並建立 zabbix 數據庫,注意數據庫編碼

create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;

##create user zabbix@localhost identified by 'zabbix'; 如果連不上數據庫可以加上這兩行
##grant all privileges on zabbix.* to zabbix@'%';
quit;

導入初始架構和數據,zabbix 數據庫用戶為 zabbix,密碼為 zabbix

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

導入成功,如下圖:

配置zabbix server數據庫連接:
修改 zabbix server 配置文件vi /etc/zabbix/zabbix_server.conf 里的數據庫密碼

vi /etc/zabbix/zabbix_server.conf 
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

配置zabbix前端php-fpm:
編輯配置文件 vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf, add nginx to listen.acl_users directive.

listen.acl_users = apache,nginx
php_value[date.timezone] = Asia/Shanghai

Nginx端配置
nginx配置1:
編輯配置文件 vi /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf, uncomment and set 'listen' and 'server_name' directives.

# listen 80;
# server_name localhost;

nginx配置2:

注釋listen,server_name,root等默認配置
vim /etc/opt/rh/rh-nginx116/nginx/nginx.conf
    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
#        root         /opt/rh/rh-nginx116/root/usr/share/nginx/html;

#        Load configuration files for the default server block.
#        include      /etc/opt/rh/rh-nginx116/nginx/default.d/*.conf;

啟動相關服務,並配置開機自動啟動

systemctl start zabbix-server rh-php72-php-fpm rh-nginx116-nginx

systemctl enable zabbix-server rh-php72-php-fpm rh-nginx116-nginx

使用瀏覽器訪問http://ip/zabbix 即可訪問 zabbix 的 web 頁面

默認登陸賬號密碼:Admin---zabbix

安裝部署zabbix-agent2

zabbix-agent2作為一款新的agent,未來可能會替代原有的agent
特性:

降低了TCP連接數量,也就是降低了資源消耗
用go語言開發,集成了zabbix-agent原有功能,並且易於通過插件擴展第三方功能

1)配置yum源

rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

2)安裝zabbix-agent2:

yum install -y zabbix-agent2
rpm -ql zabbix-agent2 //查看相關文件
egrep -v '^#|^$' /etc/zabbix/zabbix_agent2.conf //查看配置文件

3)配置 Zabbix-Agent 指向 Zabbix-Server

[root@m02 ~]# vim /etc/zabbix/zabbix_agent2.conf
Server=192.168.198.128

4)啟動 Zabbix-Agent , 默認監聽在 10050 端⼝

[root@m02 ~]# systemctl start zabbix-agent2
[root@m02 ~]# systemctl enable zabbix-agent2
[root@m02 ~]# netstat -lntp

zabbix添加監控主機

web界面介紹:
主機-->監控項-->模板-->觸發器-->執行動作-->告警媒介

1)配置ZabbixWeb⻚⾯,點擊配置->選擇主機->創建主機


zabbix添加監控項

有時候server端中自帶的模板沒有提供我們所需要的監控項,就需要我們手動進行添加監控項
客戶端自定義監控取值-->服務端web獲取監控項鍵值
1)簡單的自定義監控配置(單一服務狀態)
原理:
編輯客戶端配置文件,新增UserParameter= ,

舉例:監控nginx服務是否啟動(ps -ef |grep -c [n]ginx)

方式一,直接修改/etc/zabbix/zabbix_agent.conf配置文件參數:

vim /etc/zabbix/zabbix_agent2.conf
UserParameter=web_state,ps -ef |grep -c [n]ginx

方式二:在/etc/zabbix/zabbix_agent2.d/目錄下編寫自定義監控文件

vim web_server.conf
## UserParameter=鍵(變量名),值(變量信息)
UserParameter=web_state,ps -ef|grep -c [n]ginx

重啟服務:
systemctl restart zabbix-agent2

在服務端中測試:

yum install -y zabbix-get
zabbix_get -s 192.168.81.162 -k 'web_state'  

WEB配置:
創建監控項

配置---主機---選擇設置監控項的主機---進入【監控項】---【創建監控項】

監控項頁面配置:

名稱:設置監控項名稱web_server_status→ 鍵值:設置定義好的監控項web_state→ 信息類型:指定監控輸出信息字符類型
→ 單位:指定輸出內容單位信息→ 更新間隔時間:默認30s→ 創建新的應用集:server-status(將新的監控項添加到新的應用集中)

檢查是否收集到監控信息:

監測→ 最新數據→ 應用集:篩選server_status

2)復雜的自定義監控配置(多個服務狀態)

監控一台主機上的多個服務的狀態,比如nginx,ssh,mysql等等多個服務的狀態信息,我們可以在在/etc/zabbix/zabbix_agent2.d/目錄下定義多個服務配置文件,當然,這樣比較麻煩,我們可以通過以下方法簡化配置:在/etc/zabbix/zabbix_agent2.d/下,定義一個傳參的配置文件,然后在WEB中,分別配置不同服務的監控項,這樣就節約了agent端配置多個配置文件的時間。

舉例:
將上面實驗1中的web_server.conf 改名為server_state.conf

# cd /etc/zabbix/zabbix_agentd.d/
# mv web_server.conf server_state.conf
# vim server_state.conf
UserParameter=server_state[*],ps -ef|grep -c $1

在zabbix-server命令測試
zabbix_get  -s 172.16.1.7 -k 'server_state[ssh]'

在WEB中新建不同的監控項
以監控ssh服務狀態為例:

查看監測結果:


同理可以定義其它服務如:nginx,mysqld等等監控項

zabbix添加告警

1)頁面報警

創建觸發器(配置---主機---選擇相應監控主機觸發器---創建觸發器)
設置表達式:
#{監控主機名稱:鍵值名稱.調用的表達式函數}<=2
{m02:server_state[nginx].last()}<=2
參數說明:
last()       收集到最新信息(數值)  *****
max()      在一定周期內,收集到的最大值
min()       在一定周期內,收集到的最小值
diff()        在一定時間內,判斷收集的信息是否不同
change() 在一定時間內,判斷收集的信息是否不同
avg()       取一段時間的平均值

至此: 已經看到提示報警

2)郵件告警

實驗nginx掛了將告警信息發送到郵箱

添加報警媒介,類型為Email,這里查了很多博客,全是以mailx為主的,需要配置腳本,其實我覺得直接用zabbix自己的email就可以,以163郵箱為例,先在web界面上創建一個email報警媒介,


發送測試郵件

假設nginx服務停止了,我們要通過配置里面的動作選項,經過動作里面的設置,讓指定用戶通過報警媒介發送郵件給指定負責人,剛剛配置好了報警媒介,現在配置動作:
可以將通過不同的分組將不同級別的報警進行分組發送,通過操作步驟將報警升級:比如,1h內責任人未進行報警處理,那么就自動進行第二步操作將告警發送給上級領導

配置 操作:

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

現在配置好了動作,最后需要配置指定用戶發送郵件給負責人,指定用戶在動作選項已經選擇超級管理員Admin,現在選擇user setting配置

3)釘釘告警

實驗nginx掛了將告警信息發送到釘釘
先添加釘釘機器人, 將Webhook復制,填寫到下面腳本中

還需設置安全設置,我這只把zabbix-server地址填進去,這樣就禁止其他IP使用webhook

配置釘釘機器人腳本,釘釘Webhook代碼:

vim /usr/lib/zabbix/alertscripts/dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests,json,sys,os

headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "webhook地址"
def msg(text):
    json_text= {
     "msgtype": "text",
     "text": {
         "content": text
     },
     "at": {
         "atMobiles": [
             "186..." #需要@群里誰
         ],
         "isAtAll": True #是否全部@,True為是,False為否
     }
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content

if __name__ == '__main__':
    text = sys.argv[1]
    msg(text)``

在zabbix-server的配置文件找到 ,進入對應的文件目錄/usr/lib/zabbix/alertscripts,這里是存放zabbix腳本的地方,web端可以通過執行此目錄修下的腳本,將腳本內容copy到dingding.py,給他執行權限  chmod +x dingding.py
記住腳本放置位置:

AlertScriptsPath=/usr/lib/zabbix/alertscripts

測試釘釘腳本:

釘釘信息:

配置報警媒介
在web端配置釘釘腳本媒介

腳本參數:https://www.dell.com/zh-cn

{ALERT.MESSAGE}
配置動作
接下來就是配置動作,和郵件一樣,只需要更改報警媒介為創建好的“釘釘報警”,最后添加User setting中的報警媒介,和之前一樣,在添加一個釘釘報警的

配置用戶
配置用戶Admin發送郵件:

測試\

4)企業微信告警

https://www.jianshu.com/p/ad72ca92120d

分布式監控:

分布式監控的作用
分擔server的集中式壓力 Agent > proxy >server
解決多機房之間的網絡延時問題 上海 > proxy > server

監控vCenter

https://www.bilibili.com/read/cv11668253


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM