zabbix監控搭建

常見開源監控軟件

  • cacti、nagios、zabbix、smokeping、open-falcon等等php

  • cacti、smokeping偏向於基礎監控,成圖很是漂亮python

  • cacti、nagios、zabbix服務端監控中心,須要php環境支持,其中zabbix和cacti都須要mysql做爲數據存儲,nagios不用存儲歷史數據,注重服務或者監控項的狀態,zabbix會獲取服務或者監控項目的數據,會把數據記錄到數據庫裏,從而能夠成圖mysql

  • open-falcon爲小米公司開發,開源後受到諸多大公司和運維工程師的追捧,適合大企業,滴滴、360、新浪微博、京東等大公司在使用這款監控軟件,值得研究linux

  • 目前流行的監控爲: zabbix ,Prometheus+grafanaios

  • 擴展:使用Prometheus+grafana打造高逼格監控平臺:http://blog.51cto.com/youerning/2050543nginx


zabbix監控介紹

  • C/S架構,基於C++開發,監控中心支持web界面配置和管理
  • 單server節點能夠支持上萬臺客戶端
  • 最新版本3.4,官方文檔https://www.zabbix.com/manuals
  • zabbix須要LAMP環境。

zabbix監控的5個組件

  • zabbix-server 監控中心,接收客戶端上報信息,負責配置、統計、操做數據
  • 數據存儲 存放數據,好比mysql
  • web界面 也叫web UI,在web界面下操做配置是zabbix簡單易用的主要緣由
  • zabbix-proxy 可選組件,它能夠代替zabbix-server的功能,減輕server的壓力
  • zabbix-agent 客戶端軟件,負責採集各個監控服務或項目的數據,並上報


安裝zabbix

首先要準備兩臺機器。web

官網下載地址 www.zabbix.com/download

下載yum源 wget https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

下載好後安裝 :rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm

兩臺機器都要下載安裝sql

有了yum源以後須要yum安裝如下軟件:

  • 服務端安裝:

yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql數據庫

  • 客戶端安裝:

yum install -y zabbix-agentvim

  • 會連帶安裝httpd和php
  • 若是mysql以前沒有安裝的話,須要根據lamp那一章的mysql安裝方法安裝mysql,也能夠yum安裝mysql

編輯vim /etc/my.cnf 增長字符集 utf8

若是不設置在web界面zabbix中文顯示會有問題。

增長內容以下:

character_set_server = utf8

添加完後重啓下mysql

mysql建立庫

  • 首先登錄 mysql -uroot -p123456

  • 登錄後指定字符集 create database zabbix character set utf8;

  • 爲了讓php代碼連接mysql等,在建立用戶,指定來源IP,建立密碼。

grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'aming-zabbix';

  • 退出

導入原始數據

沒有這些數據zabbix沒法工做。

  • cd /usr/share/doc/zabbix-server-mysql-3.4.11/
  • gzip -d create.sql.gz
  • 導入: mysql -root -p123456 zabbix < create.sql
[root@localhost ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.11/
[root@localhost zabbix-server-mysql-3.4.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README
[root@localhost zabbix-server-mysql-3.4.11]# gzip -d create.sql.gz 
[root@localhost zabbix-server-mysql-3.4.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql  NEWS  README
[root@localhost zabbix-server-mysql-3.4.11]# mysql -root -p123456 zabbix < create.sql 
Warning: Using a password on the command line interface can be insecure.
[root@localhost zabbix-server-mysql-3.4.11]#

修改zabbix啓動文件否則沒法正常啓動

vim /etc/zabbix/zabbix_server.conf

  • 定義數據庫IP(搜索DBHost)
### Option: DBHost
#       Database host name.
#       If set to localhost, socket is used for MySQL.
#       If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
# DBHost=localhost
DBHost=127.0.0.1

正常生產環境中數據庫可能在另外一臺機器上,須要定義那臺機器得IP.

  • 定義DBName 要和數據庫定義得名字同樣

  • 定義DBUser,以及密碼。

# DBUser=

DBUser=zabbix
DBPassword=aming-zabbix

以後啓動zabbix服務

  • systemctl start zabbix-server

啓動後用ps aux |grep zabbix檢查一下,若是出現特別多得內容說明啓動成功了,若是隻有幾行說明啓動得有問題。

  • 啓動httpd服務:systemctl start httpd(啓動前檢查是否啓動了nginx監聽80端口,若是啓動須要停掉)

  • 加入開機啓動裏: systemctl enable zabbix-server ,systemctl enable httpd

檢查zabbix監聽端口(10051)

  • netstat -lntp |grep zabbix
[root@localhost ~]# netstat -lntp |grep zabbix
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      2486/zabbix_server  
tcp6       0      0 :::10051                :::*                    LISTEN      2486/zabbix_server

以後能夠配置zabbix web界面了

  • 訪問zabbix-server IP/zabbix/出現以下界面:

  • 點下一步後出現報錯,Time zone for PHP is not set (configuration parameter "date.timezone").

只看faild 不用管ok的。vi /etc/php.ini 找到timezone,添加

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone =Asia/Shanghai

定義完成以後重啓httpd服務。以後刷新網頁就會沒有剛剛的報錯,直接點下一步便可。

  • 以後填寫如下數據庫的信息,跟服務器設置保持一致便可。

  • 下一步後,填寫name無所謂寫什麼自定義便可。

  • 完成以後出現登錄界面,默認用戶名:Admin 密碼:zabbix

  • 進入後臺第一件事情就是修改密碼

忘記zabbix 登錄Admin密碼如何作

  • 進入mysql數據量命令行,選擇zabbix庫
mysql -u root -p123456
use zabbix
  • mysql -uroot -p zabbix

  • update users set passwd=md5(‘newpasswd’) where alias=‘Admin’;

  • 這樣就更改了Admin用戶的密碼

Zabbix 客戶端配置

  • 編輯配置 vim /etc/zabbix/zabbix_agentd.conf //修改以下配置

其中有三個地方須要修改

Server=127.0.0.1修改成Server=192.168.159.128 //定義服務端的ip(被動模式)
ServerActive=127.0.0.1修改成ServerActive=192.168.159.128 //定義服務端的ip(主動模式)
Hostname=Zabbix server修改成Hostname=aming-01 //這是自定義的主機名,一會還須要在web界面下設置一樣的主機名
  • systemctl start zabbix-agent 啓動服務
  • systemctl enable zabbix-agent 設置開機自啓

主動模式和被動模式

  • 主動或者被動是相對客戶端來說的

  • 被動模式,服務端會主動鏈接客戶端獲取監控項目數據,客戶端被動地接受鏈接,並把監控信息傳遞給服務端

  • 主動模式,客戶端會主動把監控數據彙報給服務端,服務端只負責接收便可。

  • 當客戶端數量很是多時,建議使用主動模式,這樣能夠下降服務端的壓力。

  • 服務端有公網ip,客戶端只有內網ip,但卻能連外網,這種場景適合主動模式


添加監控主機

  • 首先添加主機羣組 aming-text

  • 而後點擊主機,添加主機命名爲:aming-01,配置如圖:

監控項可定義主動模式被動模式

  • 應用集就是監控項目的集合

  • 自動發現規律:會自動發現客戶端的磁盤分區,網卡流量,文件系統進行監控。

添加自定義模板

  • 首先先新建模板

  • 而後連接其餘模板

之因此連接模板是由於會把自動發現選項的模板也連接過來。自動發現的模板沒法單獨複製。連接完以後,把不須要的在刪除。

  • 刪除連接模板

連接以後的模板沒法刪除,由於是連接其餘組的膜拜你。可是取消連接以後,自定義組會保留以前連接的全部模板,這樣就能夠刪除沒有用的了。

  • 而後就能夠刪除無用模板

先刪除監控項,後刪除應用集。

保留如下選項,其餘均可以刪除

最後必定要選擇主機,把剛剛建好的模板給鏈接上,

處理圖形中的亂碼

  • 剛開始看圖形界面會出現漢字沒法顯示的狀況

設置爲中文後,zabbix圖形的中文文字會顯示小方框 這是由於在zabbix的字體庫中沒有中文字體,須要從windows上借用一個過來

  • 更改字體服務端打開 vim /usr/share/zabbix/include/defines.inc.php //搜索ZBX_FONTPATH

它定義的路徑是「fonts」,它是一個相對路徑,絕對路徑爲/usr/share/zabbix/fonts,而字體文件爲「ZBX_GRAPH_FONT_NAME」所定義的「graphfont」,它是一個文件,絕對路徑爲/usr/share/zabbix/fonts/graphfont windows字體路徑爲「C:\Windows\Fonts\」,找到「simfang.ttf」(其實就是那個仿宋簡體),先把它複製到桌面上,而後上傳到linux的/usr/share/zabbix/fonts/,而且更名爲graphfont.ttf

自動發現

  • 把自動發現更新時間改成1分鐘,而後重啓server和agent

  • 看到圖形就會自動識別網卡之類的

  • 爲了防止服務器壓力,在更新出新圖表後把自動發現更新時間改成時間稍微長一點。


添加自定義監控項目

需求:監控某臺web的80端口鏈接數,並出圖

  • 編輯 vim /usr/local/sbin/estab.sh //內容以下
#!/bin/bash
##獲取80端口併發鏈接數
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
  • chmod 755 /usr/local/sbin/estab.sh

  • 客戶端上編輯配置文件 vim /etc/zabbix/zabbix_agentd.conf//增長

UnsafeUserParameters=1  //表示使用自定義腳本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh (這個名字後面要填寫到鍵值裏面key)//自定義監控項的key爲my.estab.count,後面的[*]裏面寫腳本的參數,參數由逗號分隔若是沒有參數則能夠省略,腳本爲/usr/local/sbin/estab.sh
  • 重啓zabbix-agent服務 systemctl restart zabbix-agent

  • 首先到服務端驗證,看客戶端腳本是否生效,執行命令值爲0,說明正常

[root@localhost ~]# zabbix_get -s 192.168.159.130 -p 10050 -k 'my.estab.count'
0
  • 而後在zabbix監控中心(瀏覽器)配置增長監控項目

  • 添加圖形

  • 添加觸發器

表達式


配置郵件告警

使用163或者QQ郵箱發告警郵件

首先登陸你的163郵箱,設置開啓POP三、IMAP、SMTP服務

開啓並記錄受權碼

而後到監控中心設置郵件告警

  • 「管理」,「報警媒介類型」,「建立媒體類型」

  • 腳本參數 {ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}

  • 腳本必須放在這個目錄下, 由於服務端的配置文件就是這樣定義的,/usr/lib/zabbix/alertscripts/

  • 在客戶端建立腳本mail.py

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from  subprocess import *

def sendqqmail(username,password,mailfrom,mailto,subject,content):
    gserver = 'smtp.qq.com'
    gport = 25

    try:
        msg = MIMEText(unicode(content).encode('utf-8'))
        msg['from'] = mailfrom
        msg['to'] = mailto
        msg['Reply-To'] = mailfrom
        msg['Subject'] = subject

        smtp = smtplib.SMTP(gserver, gport)
        smtp.set_debuglevel(0)
        smtp.ehlo()
        smtp.login(username,password)

        smtp.sendmail(mailfrom, mailto, msg.as_string())
        smtp.close()
    except Exception,err:
        print "Send mail failed. Error: %s" % err


def main():
    to=sys.argv[1]
    subject=sys.argv[2]
    content=sys.argv[3]
##定義QQ郵箱的帳號和密碼,你須要修改爲你本身的帳號和密碼(請不要把真實的用戶名和密碼放到網上公開,不然你會死的很慘)
    sendqqmail('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content)

if __name__ == "__main__":
    main()
    
    
#####腳本使用說明######
#1. 首先定義好腳本中的郵箱帳號和密碼
#2. 腳本執行命令爲:python mail.py 目標郵箱 "郵件主題" "郵件內容"
  • 權限必定不要忘記更改 chmod 755 /usr/lib/zabbix/alertscripts/mail.py

  • 測試腳本是否可用

[root@localhost alertscripts]# python mail.py 13261666323@163.com "這是一個測試標題" "這是一個測試內容,124234djgajgoaiodjboshjb"

測試成功,只不過中文是亂碼。

建立一個接受告警郵件的用戶

建立一個接受告警郵件的用戶,「管理」,「用戶」,「建立用戶」,「報警媒介」,類型選擇「baojing」,注意用戶的權限,若是沒有須要到用戶組去設置權限

  • 用戶組設置權限

  • 設置動做

設置動做,「配置」,「動做」,「建立動做」,名稱寫「sendmail」(自定義),「操做」頁面,內容以下

HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME} 
LEVEL:{TRIGGER.SEVERITY} 
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}

新的觸發條件」,A維護狀態 非在 維護,B觸發器示警度>=未分類,操做」,選擇發送的用戶爲剛建立的用戶,僅送到選擇「baojing」

切換到「恢復操做」,把信息改爲以下

HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME} 
LEVEL:{TRIGGER.SEVERITY} 
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}

點擊「新的」,「操做」,選擇發送的用戶爲剛建立的用戶,僅送到選擇「baojing」

測試告警


測試告警

估計把監控改爲有問題的,測試是否會發送郵件。

  • 建立自定義觸發器

此觸發器是檢測系統負載小於1的時候發送郵件。

郵件發送成功


擴展

相關文章
相關標籤/搜索