項目實戰——企業級Zabbix監控實戰(一)

項目實戰——企業級Zabbix監控實戰

實驗一:Zabbix監控的搭建

一、實驗準備

  centos系統服務器3臺、 一臺做爲監控服務器, 兩臺臺做爲被監控節點, 配置好yum源、 防火牆關閉、 各節點時鐘服務同步、 各節點之間能夠經過主機名互相通訊。
1)全部機器關閉防火牆和selinuxphp

iptables -F && setenforing

2)根據架構圖,實驗基本設置以下:
node

二、Zabbix的安裝

1)更新咱們的yum倉庫

  咱們去官網下載一個包zabbix-release-3.4-2.el7.noarch.rpm,本地安裝至咱們的虛擬機,這樣,咱們本地就有了新的yum源,能夠直接安裝zabbix服務:mysql

wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

  下載到本地之後,咱們直接安裝:linux

rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm

  然後更新咱們的yum倉庫:web

[root@server ~]# yum repolist 
Loaded plugins: fastestmirror, langpacks  
Loading mirror speeds from cached hostfile
zabbix-non-supported                                                      4/4
repo id                     repo name                                   status
base                        base                                         9,363
epel                        epel                                        11,349
zabbix/x86_64               Zabbix Official Repository - x86_64             80
zabbix-non-supported/x86_64 Zabbix Official Repository non-supported -       4
repolist: 20,796

  因爲我配置的epel源中,也有zabbix的包,可是版本很舊了,爲了避免衝突,咱們在配置文件中把epel源註釋掉,而後再來查看咱們的yum倉庫:redis

[root@server ~]# vim /etc/yum.repos.d/base.repo
    [base]
    name=base
    baseurl=file:///misc/cd
    gpgcheck=0

    #[epel]
    #name=epel
    #baseurl=http://172.17.0.1/fedora-epel/7/x86_64/
    #gpgcheck=0
[root@server ~]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id                     repo name                                    status
base                        base                                         9,363
zabbix/x86_64               Zabbix Official Repository - x86_64             80
zabbix-non-supported/x86_64 Zabbix Official Repository non-supported - x     4
repolist: 9,447

  如今,咱們去安裝包就能夠了:sql

[root@node1 ~]# yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql

  安裝完成,本步驟完成。數據庫

2)設置數據庫:

  首先,咱們修改一下配置文件——/etc/my.cnf.d/server.cnfvim

[root@server ~]# vim /etc/my.cnf.d/server.cnf
    [mysqld]
    skip_name_resolve = ON          #跳過主機名解析
    innodb_file_per_table = ON      #
    innodb_buffer_pool_size = 256M  #緩存池大小
    max_connections = 2000          #最大鏈接數

    log-bin = master-log            #開啓二進制日誌

  重啓咱們的數據庫服務:centos

[root@server ~]# systemctl restart mariadb

  建立數據庫並受權帳號

MariaDB [(none)]> create database zabbix character set 'utf8';
MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'192.168.37.%' identified by 'keer';
MariaDB [(none)]> flush privileges;             #刷新受權

  導入表
  首先,咱們來查看一下,zabbix-server-mysql這個包提供了什麼:

[root@server ~]# rpm -ql zabbix-server-mysql
/etc/logrotate.d/zabbix-server
/etc/zabbix/zabbix_server.conf
/usr/lib/systemd/system/zabbix-server.service
/usr/lib/tmpfiles.d/zabbix-server.conf
/usr/lib/zabbix/alertscripts
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-3.2.6
/usr/share/doc/zabbix-server-mysql-3.2.6/AUTHORS
/usr/share/doc/zabbix-server-mysql-3.2.6/COPYING
/usr/share/doc/zabbix-server-mysql-3.2.6/ChangeLog
/usr/share/doc/zabbix-server-mysql-3.2.6/NEWS
/usr/share/doc/zabbix-server-mysql-3.2.6/README
/usr/share/doc/zabbix-server-mysql-3.2.6/create.sql.gz      #生成表的各類腳本
/usr/share/man/man8/zabbix_server.8.gz
/var/log/zabbix
/var/run/zabbix

  咱們來使用這個文件生成咱們所須要的表:

[root@server ~]# gzip -d create.sql.gz
[root@server ~]# head  create.sql           #查看一下表頭
CREATE TABLE `users` (
    `userid`                 bigint unsigned                           NOT NULL,
    `alias`                  varchar(100)    DEFAULT ''                NOT NULL,
    `name`                   varchar(100)    DEFAULT ''                NOT NULL,
    `surname`                varchar(100)    DEFAULT ''                NOT NULL,
    `passwd`                 char(32)        DEFAULT ''                NOT NULL,
    `url`                    varchar(255)    DEFAULT ''                NOT NULL,
    `autologin`              integer         DEFAULT '0'               NOT NULL,
    `autologout`             integer         DEFAULT '900'             NOT NULL,
    `lang`                   varchar(5)      DEFAULT 'en_GB'           NOT NULL,

  咱們查看錶頭髮現沒有建立數據庫的命令,這也正是咱們剛剛手動建立數據庫的緣由。
  而後,咱們直接把這個表導入至咱們的數據庫便可:

[root@server ~]# mysql -uzbxuser -h192.168.37.111 -p zabbix < create.sql 
Enter password:

  導入之後,咱們進去數據庫查看一下:

[root@server ~]# mysql -uzbxuser -h192.168.37.111 -p
Enter password:
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
| zabbix             |
+--------------------+
MariaDB [(none)]> use zabbix;
Database changed
MariaDB [zabbix]> show tables;
+----------------------------+
| Tables_in_zabbix           |
+----------------------------+
| acknowledges               |
| actions                    |
| alerts                     |
……
| usrgrp                     |
| valuemaps                  |
+----------------------------+
127 rows in set (0.00 sec)

  能夠看出來,咱們的數據已經導入成功了。
  

三、配置 server 端

  咱們的數據庫準備好了之後,咱們要去修改server端的配置文件。

[root@server ~]# cd /etc/zabbix/
[root@server zabbix]# ls
web  zabbix_agentd.conf  zabbix_agentd.d  zabbix_server.conf
#爲了方便咱們之後恢復,咱們把配置文件備份一下
[root@server zabbix]# cp zabbix_server.conf{,.bak}
[root@server zabbix]# vim zabbix_server.conf
ListenPort=10051            #默認監聽端口
SourceIP=192.168.37.111     #發採樣數據請求的IP

  爲何要設置SourceIP,因爲咱們的客戶端可能一個主機多個IP,咱們又不能容許任意的IP都能從咱們這裏讀取數據,就會有一個驗證方式,而該方式是基於識別SourceIP來實現的。

  日誌,默認用文件記錄,也能夠發送給咱們的rsyslog日誌記錄系統,若是咱們選擇默認,則日誌存放在LogFile=/var/log/zabbix/zabbix_server.log中,也能夠本身設置。

  日誌的滾動。默認值爲1,表示滾動。咱們設爲0則表示不滾動。當數據特別多的時候,咱們也能夠設置成爲1,而後在Maximum size of log file in MB設置當數據文件最大到多少時會自動滾動。

  日誌的級別。一共有6個級別。咱們能夠根據本身的須要來設置級別。其中0表示輸出最少的信息,5表示輸出最詳細的信息,默認值爲3,設置爲3的話就表示,0、一、二、3四個級別都顯示。考慮到生產系統中的壓力時,這裏的信息,若是沒有必要的話,越簡單越好,只要在出錯的時候,咱們能夠依據其進行排錯便可。

DBHost=192.168.37.111       #數據庫對外的主機
    DBName=zabbix               #數據庫名稱
    DBUser=zbxuser              #數據庫用戶
    DBPassword=keer             #數據庫密碼
    DBPort=3306                 #數據庫啓動端口

  數據庫相關的設置。

補充:咱們可使用grep -i "^####" zabbix_server.conf來查看配置文件中有哪些大段,也可使用grep -i "^###" zabbix_server.conf來查看配置文件中每一段中的配置項有哪些

  以上,咱們的基本配置已經完成,能夠開啓服務了:

[root@server zabbix]# systemctl start zabbix-server.service

  開啓服務之後,咱們必定要去確認一下咱們的端口有沒有開啓:

[root@server zabbix]# ss -nutl |grep 10051
tcp    LISTEN     0      128       *:10051                 *:*                  
tcp    LISTEN     0      128      :::10051                :::*

  若是查到的端口沒有開啓,咱們就要去檢查一下配置文件有沒有出問題了。
  至此,咱們server端的進程啓動已經ok了,接下來就可使用web GUI來打開接口進行設定了
  

四、配置 web GUI

  咱們先來查看一下,咱們web GUI的配置文件在哪裏:

[root@server ~]# rpm -ql zabbix-web | less
/etc/httpd/conf.d/zabbix.conf
/etc/zabbix/web
/etc/zabbix/web/maintenance.inc.php
/etc/zabbix/web/zabbix.conf.php
/usr/share/doc/zabbix-web-3.2.6
/usr/share/doc/zabbix-web-3.2.6/AUTHORS
/usr/share/doc/zabbix-web-3.2.6/COPYING
/usr/share/doc/zabbix-web-3.2.6/ChangeLog
/usr/share/doc/zabbix-web-3.2.6/NEWS
/usr/share/doc/zabbix-web-3.2.6/README
……

  能夠看出,有一個/etc/httpd/conf.d/zabbix.conf文件,這個配置文件就是幫咱們作映射的文件,咱們能夠去看一看這個文件:

Alias /zabbix /usr/share/zabbix     #咱們訪問的時候要在主機後加上/zabbix來訪問咱們這個服務


  時區是必定要設置的,這裏被註釋掉是由於,咱們也能夠在php的配置文件中設置時區,若是咱們在php配置文件中設置時區,則對全部的php服務均有效,若是咱們在zabbix.conf中設置時區,則僅對zabbix服務有效。因此,咱們去php配置文件中設置咱們的時區:

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

  接下來,咱們就能夠啓動咱們的httpd服務了:

  咱們的服務已經開啓,接着咱們就能夠用瀏覽器來訪問了。

五、瀏覽器訪問並進行初始化設置

  咱們使用瀏覽器訪問192.168.37.111/zabbix,第一次訪問時須要進行一些初始化的設置,咱們按照提示操做便可:






  點擊Finish之後,咱們就會跳轉到登陸頁面,使用咱們的帳號密碼登陸便可:

  默認用戶名爲:admin ,密碼爲:zabbix 。
  登錄進來就能夠看到咱們的儀表盤了:

六、配置 agent 端

  當咱們把監控端配置啓動之後,咱們須要來設置一下咱們的監控端,咱們在被監控的主機安裝好agent,設置好他的server,並把他添加到server端,就能將其歸入咱們的監控系統中去了。

1)安裝zabbix

  一樣的,咱們先來安裝zabbix。下載包,註釋epel源,安裝所需的包。具體步驟以下:

[root@node1 ~]# wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
[root@node1 ~]# rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm 
[root@node1 ~]# vim /etc/yum.repos.d/centos7.repo 
[base]
name=base
baseurl=http://172.17.0.1/centos/7/
gpgcheck=0

#[epel]
#name=epel
#baseurl=http://172.17.0.1/fedora-epel/7/x86_64/
#gpgcheck=0
[root@node1 ~]# yum install zabbix-agent zabbix-sender -y

  安裝完成之後,咱們去修改配置文件。

2)修改配置文件

  同樣的,咱們先查一下包內有什麼:

[root@node1 zabbix]# rpm -ql zabbix-agent 
/etc/logrotate.d/zabbix-agent
/etc/zabbix/zabbix_agentd.conf
/etc/zabbix/zabbix_agentd.d
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
/usr/lib/systemd/system/zabbix-agent.service
/usr/lib/tmpfiles.d/zabbix-agent.conf
/usr/sbin/zabbix_agentd
/usr/share/doc/zabbix-agent-3.4.4
/usr/share/doc/zabbix-agent-3.4.4/AUTHORS
/usr/share/doc/zabbix-agent-3.4.4/COPYING
/usr/share/doc/zabbix-agent-3.4.4/ChangeLog
/usr/share/doc/zabbix-agent-3.4.4/NEWS
/usr/share/doc/zabbix-agent-3.4.4/README
/usr/share/man/man8/zabbix_agentd.8.gz
/var/log/zabbix
/var/run/zabbix

  對配置文件作一個備份,而後去修改配置文件:

[root@node1 ~]# cd /etc/zabbix/
[root@node1 ~]# cd /etc/zabbix/
[root@node1 zabbix]# ls
zabbix_agentd.conf  zabbix_agentd.d
[root@node1 zabbix]# cp zabbix_agentd.conf{,.bak}
[root@node1 zabbix]# vim zabbix_agentd.conf




  重點須要修改的仍然是GENERAL PARAMETERS段:

  是否容許別人執行遠程操做命令,默認是禁用的,打開的話會有安全風險。

Server=192.168.37.111       #指明服務器是誰的
ListenPort=10050            #本身監聽的端口
ListenIP=0.0.0.0            #本身監聽的地址,0.0.0.0表示本機全部地址
StartAgents=3               #優化時使用的

ServerActive=192.168.37.111 #主動監控時的服務器
Hostname=node1.keer.com     #本身能被server端識別的名稱

  修改完成以後,咱們保存退出。而後就能夠啓動服務了:

[root@node1 zabbix]# systemctl start zabbix-agent.service

  照例查看端口是否已開啓

[root@node1 zabbix]# ss -ntul |grep 10050
tcp    LISTEN     0      128       *:10050                 *:*

  已經開啓成功。接着,咱們就能夠去server端添加了。
  node2也進行一樣的操做,惟一不一樣的就是配置文件中的Hostname要設爲node2.keer.com
  

七、監控過程詳解

1)修改密碼及中文版

  做爲一隻英語很差的程序媛,小編在這裏悄悄改爲了中文版0.0若是你們英語好的話看英文版便可,英語很差就像小編同樣改了吧,畢竟中文版比較適合初學者更快的學習~

  按如上操做便可,選擇中文之後,點擊下面的update便可更新成功,更新事後是這樣嬸兒的~

  一樣的,爲了安全起見,咱們把密碼改掉:


  修改完成後一樣點擊更新便可。

2)建立主機及主機羣組

  咱們先來定義一個主機羣組:


  而後咱們就能夠去添加主機了:


  固然,上面有不少選擇卡,有一個加密:

  設置完成後,點擊添加。咱們就能夠看到,咱們添加的這個主機已經出如今列表中了:

  一樣的,咱們把node2節點也添加進來:

3)監控項(items)

① 介紹

  咱們點擊上圖中node1的監控項,便可建立咱們的監控項,首先,咱們建立三個應用集:

  而後咱們來定義監控項:

  任何一個被監控項,若是想要可以被監控,必定要在zabbix-server端定義了可以鏈接至zabbix-agent端,而且可以獲取命令。或者在agent端定義了可以讓server端獲取命令。通常都是內建的命令,都對應的有其名字,被咱們稱之爲key

  關於key值,咱們能夠直接在網頁上設置(服務器自動執行),也可使用命令行命令(手動執行)來獲取:

[root@server ~]# zabbix_get -s 192.168.37.122 -p 10050 -k "system.cpu.intr"
  在咱們的agent端,也可使用命令來查看intr的速率變化:

  咱們繼續來看咱們的監控項:

  說了這麼多,咱們來簡單定義一個:

② 定義一個不帶參數的監控項



  設置完之後,點擊更新,便可加入,並會自動跳轉至下圖頁面:

  定義完成,咱們回到全部主機,等待5秒,咱們能夠看到,咱們node1節點後面的選項已經有變成綠色的了:

  咱們也能夠回到咱們的儀表盤,能夠看到,咱們的監控項有一個處於啓用狀態:

  那麼,咱們的數據在哪裏呢?能夠點擊最新數據,把咱們的node1節點添加至主機,應用一下,就能夠看到下面的狀態了:

  能夠看到,咱們還有一個圖形頁面,點進去則能夠看圖形的分佈:

  事實上,咱們關注的指標有不少種,咱們一一添加進來便可。
  剛剛咱們定義的監控項是很簡單的,指定一個key便可,可是有些監控項是帶有參數的,這樣一來,咱們的監控項就有更多的靈活性。接下來,咱們來簡單說明一個須要帶參數的監控項:

③ 定義一個帶參數的監控項


  圖中的[]就是須要參數的意思,裏面的值即爲參數,帶<>爲不可省略的。咱們就以這個例子來講明:
  if表示是接口名;<mode>表示是那種模式,包括但不限於:packets(包)、bytes(字節)、errors(錯誤)、dropped(丟包)、overuns等等(上述內容經過ifconfig查看)
  咱們來設置一下這個監控值:


  一樣的,咱們也能夠經過命令行來查看:

[root@server ~]# zabbix_get -s 192.168.37.122 -p 10050 -k "net.if.in[ens33,packets]"

  咱們來看看網頁的顯示狀況:檢測中 ---> 最新數據 ---> Network Interface Stats(圖形)

④ 快速定義相似指標

  若是咱們想要定義一個相似的指標,咱們能夠直接選擇克隆,而後簡單的修改一點點參數便可。
  就以咱們剛剛定義的net.if.in[ens33,packets]爲例,若是咱們想要在定義一個out的進行以下操做便可:


  若是咱們要以字節爲單位也要定義的話,進行一樣的操做:


  若是有須要的話也能夠把byte再克隆成out。就不一一演示了~
  能夠看一下,咱們如今已經定義的指標:

  咱們來到 檢測中 ---> 最新數據,能夠看到,咱們定義的監控項都已經有值了:

⑤ 刪除監控項

  若是有一個監控項,咱們用不上了,就能夠刪除掉。可是若是你直接刪除的話,默認數據是會留下的,因此咱們要先清除數據,而後再刪除,具體操做步驟以下:

⑥ 監控項存儲的值

  對於監控項存儲的值,老一點的版本只有如下三種方式:

  • As is:不對數據作任何處理(存儲的爲原始值)
  • Delta:(simple change)(變化),本次採樣減去前一次採樣的值的結果
  • Delta:(speed per second)(速率),本次採樣減去前一次採樣的值,再除以通過的時長;
      而在3.4版本之後有了更多的表現形式:

4)觸發器(trigger)

① 簡介

  當咱們的採集的值定義完了之後,就能夠來定義觸發器了。
  咱們觸發器的定義是:界定某特定的item採集到的數據的非合理區間非合理狀態。一般爲邏輯表達式。
  邏輯表達式(閾值):一般用於定義數據的不合理區間,其結果以下:
  OK(不符合條件):正常狀態 --> 較老的zabbix版本,其爲FALSE;
  PROBLEM(符合條件):非正常狀態 --> 較老的zabbix版本,其爲TRUE;
  通常,咱們評定採樣數值是否爲合理區間的比較穩妥的方法是——根據最後N次的平均值來斷定結果;這個最後N次一般有兩種定義方式:

  1. 最近N分鐘所得結果的平均值
  2. 最近N次所得結果的平均值

 並且,咱們的觸發器存在可調用的函數:

nodata()    #是否採集到數據,採集不到則爲異常
last()      #最近幾回的平均值
date()
time()
now()
dayofmonth()
...

  注:能用數值保存的就不要使用字符串

② 觸發器表達式

  基本的觸發器表達式格式以下所示

{<server>:<key>.<function>(<parameter>)}<operator><constant>
  • server:主機名稱;
  • key:主機上關係的相應監控項的key;
  • function:評估採集到的數據是否在合理範圍內時所使用的函數,其評估過程能夠根據採起的數據、當前時間及其它因素進行;
  • 目前,觸發器所支持的函數有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等
  • parameter:函數參數;大多數數值函數能夠接受秒數爲其參數,而若是在數值參數以前使用「#」作爲前綴,則表示爲最近幾回的取值,如sum(300)表示300秒內全部取值之和,而sum(#10)則表示最近10次取值之和;
  • 此外,avg、count、last、min和max還支持使用第二個參數,用於完 成時間限定;例如,max(1h,7d)將返回一週以前的最大值;
      表達式所支持的運算符及其功能以下圖所示:
③ 定義一個觸發器

  咱們能夠查看一下rate of packets(in)的值,並以其爲標準肯定咱們的非正常的值:

  圖中咱們能夠看出,咱們的最大值爲74,最小值爲4,平均值爲24。這樣的話,咱們能夠定義50以上的都是非正常的值。
  下面咱們來定義一個觸發器:
  進入:配置 ---> 主機 ---> node1 ---> 觸發器 ---> 建立觸發器

  咱們的表達式能夠直接點擊右側的添加,而後定義本身所需的內容,便可自動生成:

  生成完畢後,咱們就點擊頁面下方的添加,即成功定義了一個觸發器,同時頁面自動跳轉:

  而後咱們去看一下咱們剛剛定義了觸發器的那個監控項:

  咱們能夠看出,這個裏面就有了一根線,就是咱們剛剛定義的值,超過線的即爲異常狀態,看起來很是直觀。
  可是,如今即便超過了這根線,也僅僅會產生一個觸發器事件而不會作其餘任何事。所以,咱們就須要去定義一個動做(action)。

④ 觸發器的依賴關係

  咱們的觸發器彼此之間可能會存在依賴關係的,一旦某一個觸發器被觸發了,那麼依賴這個觸發器的其他觸發器都不須要再報警。
  咱們能夠來試想一下這樣的場景:
  咱們的多臺主機是經過交換機的網絡鏈接線來實現被監控的。若是交換機出了故障,咱們的主機天然也沒法繼續被監控,若是此時,咱們的全部主機通通報警……想一想也是一件很可怕的事情。要解決這樣的問題,就是定義觸發器之間的依賴關係,當交換機掛掉,只它本身報警就能夠了,其他的主機就不須要在報警了。這樣,也更易於咱們判斷真正故障所在。
  注意:目前zabbix不可以直接定義主機間的依賴關係,其依賴關係僅能經過觸發器來定義。
  咱們來簡單舉一個例子,示範一下如何定義一個依賴關係:
  打開任意一個觸發器,上面就有依賴關係,咱們進行定義便可:


  因爲當前咱們只定義了一個觸發器,就不演示了,過程就是這樣~添加之後點擊更新便可。
  觸發器能夠有多級依賴關係,好比咱們看下面的例子:

5)定義動做(action)

① 簡介

  咱們須要去基於一個對應的事件爲條件來指明該作什麼事,通常就是執行遠程命令或者發警報
  咱們有一個告警升級的機制,因此,當發現問題的時候,咱們通常是先執行一個遠程操做命令,若是可以解決問題,就會發一個恢復操做的訊息給接收人,若是問題依然存在,則會執行發警報的操做,通常默認的警報接收人是當前系統中有的zabbix用戶,因此當有人須要收到警報操做的話,咱們則須要把它加入咱們的定義之中。
  其次,每個用戶也應該有一個接收告警信息的方式,即媒介,就像咱們接收短信是須要有手機號的同樣。
  咱們的每個監控主機,可以傳播告警信息的媒介有不少種,就算咱們的每一種大的媒介,可以定義出來的實施媒介也有不少種。而對於一個媒介來講,每個用戶都有一個統一的或者不一樣的接收告警信息的端點,咱們稱之爲目標地或者目的地。
  綜上,爲了可以發告警信息,第一,咱們要事先定義一個媒介,第二,還要定義這個媒介上用戶接收消息的端點(固然,在用戶上,咱們也稱之爲用戶的媒介)。
  咱們能夠去看一下系統內建的媒介類型:

  這只是大的媒介類型,裏面還有更多的細分,咱們以Email爲例:

  一樣的,同一個類型咱們也能夠定義多個,仍是以Email爲例,咱們能夠定義一個騰訊的服務器,一個網易的服務器,一個阿里的服務器等等。

② 定義一個媒介(media)

  咱們仍是以Email爲例。來簡單的定義一個媒介:


  這樣定義之後,咱們去更新一下就能夠了。
  媒介定義好了,那麼咱們怎麼纔可以而後用戶接收到郵件呢?好比讓咱們的Admin用戶接收郵件,咱們應該怎麼操做呢?具體步驟以下:
  進入 管理 ---> 用戶 ---> Admin ---> 報警媒介
  咱們來添加一條進來:

  添加事後是這樣的:

  而後咱們更新就能夠了。
  一個用戶能夠添加多個接收的媒介類型。

③ 定義一個動做(action)

  咱們以前說過了,動做是在某些特定條件下觸發的,好比,某個觸發器被觸發了,就會觸發咱們的動做。
  如今,我麼基於redis來定義一個動做。
  首先,咱們在agent端使用yum安裝一下redis

[root@node1 ~]# yum install redis -y

  修改一下配置文件:

[root@node1 ~]# vim /etc/redis.conf 
bind 0.0.0.0        #不作任何認證操做

  修改完成之後,咱們啓動服務,並檢查端口:

[root@node1 ~]# systemctl start redis
[root@node1 ~]# ss -nutlp | grep redis
tcp    LISTEN     0      128       *:6379                  *:*                   users:(("redis-server",pid=5250,fd=4))

  接着,咱們就能夠去網站上來定義相關的操做了:

1.定義監控項

  進入 配置 ---> 主機 ---> node1 ---> 監控項(items)---> 建立監控項

  填寫完畢之後,咱們點擊下方的添加。

  該監控項已成功添加。
  咱們能夠去查看一下他的值:
  檢測中 ---> 最新數據

2.定義觸發器

  定義好了監控項之後,咱們亦可來定義一個觸發器,當服務有問題的時候,咱們才能及時知道:
  進入 配置 ---> 主機 ---> node1 ---> 觸發器(trigger)---> 建立觸發器

  填寫完畢之後,咱們點擊下方的添加。

  該觸發器已成功添加。
  咱們去查看一下:
  監測中 ---> 最新數據

  咱們來手動關閉redis服務來檢測一下:

[root@node1 ~]# systemctl stop redis.service

  進入 監測中 ---> 問題

  能夠看到,如今已經顯示的是問題了。而且有持續的時間,當咱們的服務被打開,會轉爲已解決狀態:

[root@node1 ~]# systemctl start redis.service

3.定義動做(action)

  如今咱們就能夠去定義action了。
  進入 配置 ---> 動做 ---> 建立動做(注意選擇事件源爲觸發器)


  咱們能夠進行操做添加:

  咱們能夠看出,還須要在虛擬機上進行兩項操做,一是修改sudo配置文件使zabbix用戶可以臨時擁有管理員權限;二是修改zabbix配置文件使其容許接收遠程命令。咱們進行以下操做:

[root@node1 ~]# visudo          #至關於「vim /etc/sudoers」
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)   ALL
    zabbix    ALL=(ALL)   NOPASSWD: ALL     #添加的一行,表示不須要輸入密碼

[root@node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
    EnableRemoteCommands=1          #容許接收遠程命令
    LogRemoteCommands=1             #把接收的遠程命令記入日誌

[root@node1 ~]# systemctl restart zabbix-agent.service

  咱們添加了第一步須要作的事情,也就是重啓服務,若是重啓不成功怎麼辦呢?咱們就須要來添加第二步:

  添加完成之後,咱們能夠看一下:

  操做添加完了,若是服務自動恢復了,咱們能夠發送消息來提示:

  至此,咱們的動做設置完畢,能夠點擊添加了,添加完成會自動跳轉至以下頁面:

  如今咱們能夠手動中止服務來進行測試:

[root@node1 ~]# systemctl stop redis.service

  而後咱們來到問題頁面來查看,發現確實有問題,而且已經解決:

  咱們能夠去server端查看是否收到郵件:

  也能夠去agent端查看端口是否開啓:

[root@node1 ~]# systemctl stop redis.service 
[root@node1 ~]# ss -ntl
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN      0      128        *:6379                   *:*                  
LISTEN      0      128        *:111                    *:*                  
LISTEN      0      5      192.168.122.1:53                     *:*                  
LISTEN      0      128        *:22                     *:*                  
LISTEN      0      128    127.0.0.1:631                    *:*                  
LISTEN      0      128        *:23000                  *:*                  
LISTEN      0      100    127.0.0.1:25                     *:*                  
LISTEN      0      128        *:10050                  *:*                  
LISTEN      0      128       :::111                   :::*                  
LISTEN      0      128       :::22                    :::*                  
LISTEN      0      128      ::1:631                   :::*                  
LISTEN      0      100      ::1:25                    :::*

  能夠看出端口正常開啓,咱們的動做觸發已經完成。

補充:咱們也可使用腳原本發送警報,咱們的腳本存放路徑在配置文件中能夠找到,定義爲:AlterScriptsPath=/usr/lib/zabbix/alertscripts

  接下來,咱們來一波完全一點的操做,咱們來手動修改一下redis服務的監聽端口,這樣,咱們就不能經過重啓服務恢復了:

[root@node1 ~]# vim /etc/redis.conf
    #port 6379
    port 6380               #註釋掉原來的端口,更換爲新的端口

[root@node1 ~]# systemctl restart redis

  而後,咱們來網頁查看一下狀態:
  進入 監測中 ---> 問題,能夠看到是報錯的:

  這樣,在通過了重啓服務之後仍是沒能把解決問題,就會發郵件告警:

  咱們再把服務端口改回來,而後重啓服務。這樣,等到問題自動解決了之後,咱們會再次收到郵件:


  這樣,咱們的動做設定已經所有測試完成。
  

6)zabbix可視化

① 簡介

  數據日積月累,若是咱們想要更直觀的瞭解到各項數據的狀況,圖形無疑是咱們的最佳選擇。
  zabbix提示了衆多的可視化工具提供直觀展現,如graph、screen及map等。上文中咱們也看到過一些簡單的圖形展現。
  若是咱們想要把多個相關的數據定義在同一張圖上去查看,就須要去自定義圖形了~

② 自定義圖形(Graphs)

  自定義圖形中能夠集中展現多個時間序列的數據流。支持「線狀圖(normal)」、「堆疊面積圖(stacked)」、「餅圖(pie)」 和「分離型餅圖(exploded)」四種不一樣形式的圖形。
  具體的設置過程以下:
  進入 配置 ---> 主機 ---> node1 ---> 圖形,選擇右上角建立圖形:

  咱們來看一看四種狀態:




  包括咱們的主機均可以自定義,不過通常來講,線型是看的最清晰的,咱們一般會使用這個。
  咱們也能夠克隆一個packets來更改成bytes用~一樣的,咱們若是想添加別的內容,也均可以添加的。
  咱們一共添加了三個圖形,咱們能夠在 監測中 ---> 圖形 來查看

③ 聚合圖形(Screens)

  咱們建立的自定義圖形也能夠放在一個聚合圖裏顯示,具體的設置方法以下:
  進入 監測中 ---> 聚合圖形 ---> 選擇右上角建立聚合圖形

  咱們還能夠選擇分享:

  定義好了添加便可。
  定義完成之後,咱們須要編輯一下,來指定保存哪些圖:



  依次添加便可,添加完成以後是這樣嬸兒的~:

  由於咱們只有三張圖,因此添加的有重複的,一般狀況下是不須要這樣的。

④ 幻燈片演示(Slide shows)

  若是咱們有多個聚合圖形想要按順序展現的話,咱們就能夠定義一個幻燈片。
  具體步驟以下:
  進入 監測中 ---> 聚合圖形 ---> 右上角選擇幻燈片演示 ---> 建立幻燈片


  而後咱們打開便可。打開之後顯示的是圖片1,5s之後會自動切換爲圖片2。
  這樣就能夠實現幻燈片演示,咱們就不須要去手動切換了。

⑤ 定義拓撲圖(Maps)

  在拓撲圖中,咱們能夠定義成一個複雜的網絡鏈接圖,咱們可使用一臺主機來鏈接另外一臺主機,這樣的話,咱們就能夠查看出究竟是哪一個連接出了問題。
  咱們就不來演示了,看一下過程便可:
  進入 監測中 ---> 拓撲圖 ---> 全部地圖 ---> Local network(默認就有的)

  經過 Ping 和 Traceroute 就能夠實驗咱們上述的功能。

7)模板

① 建立模板

  以前咱們說過,每個主機的監控項都不少,咱們一個一個的添加實在是太頭疼了,更況且,可能不止一個主機。
  可是咱們能夠把一個redis的監控項添加進一個模板裏,這樣更方便於咱們之後的添加。
  具體操做以下:
  進入 配置 ---> 模板 ---> 選擇右上角建立模板

  填寫完之後,咱們點擊下方的添加便可。
  咱們能夠基於組過濾一下,就能看到咱們剛剛定義的模板:

  同樣的,咱們能夠向裏面添加應用集、監控項、觸發器、圖形等等,添加完成之後,後期咱們再有主機須要添加就直接套用模板便可。
  須要注意的一點是,咱們如今添加的是模板,因此不會當即採用數據,只有連接到主機上之後,纔會真正生效。

② 模板的導入與導出

  咱們也能夠直接導入一個模板,在互聯網上能夠找到不少,導入的步驟以下:


  一樣的,咱們建立好的模板也能夠導出爲文件:
  咱們任意選中一個準備好的模板,而後頁面的最下方就有導出按鈕:


  所以,咱們就能夠很是方便的進行應用了~

③ 模板的應用

  咱們的軟件已經建立了許多模板,咱們可使用一個模板來看看效果。
  進入 配置 ---> 主機 ---> node1 ---> 模板
  咱們就能夠選擇要添加的模板了:


  到這裏咱們就能夠點擊更新了。一旦咱們成功連接至模板,咱們的主機數據就會更新了:

  注意:一、一個主機能夠連接多個模板,但儘可能不要讓一個指標被採樣兩次。
  二、若是咱們有多個主機,同時這些主機也在一個主機組裏,這樣的話,咱們只須要在這個主機組裏添加模板,就可以讓在主機組裏的全部主機進行tongb

④ 移除模板連接

  當咱們一個主機的模板不想要用了,咱們就能夠移除模板連接,具體操做步驟以下:
  進入 配置 ---> 主機 ---> node1 ---> 模板
  咱們就能夠把不須要的模板移除:

  咱們來刪除掉試試看,移除並清理之後,咱們點擊更新。就會自動跳轉至以下界面:

  能夠看出,咱們的模板已經被移除了。

8)宏(macro)

① 簡介

  宏是一種抽象(Abstraction),它根據一系列預約義的規則替換必定的文本模式,而解釋器或編譯器在遇到宏時會自動進行這一模式替換。
  相似地,zabbix基於宏保存預設文本模式,而且在調用時將其替換爲其中的文本。
  zabbix有許多內置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等。
  詳細信息請參考官方文檔
  

② 級別

  宏一共有三種級別,分別是全局宏模板宏主機宏
  不一樣級別的宏的適用範圍也不同。

全局宏也能夠做用於全部的模板宏和主機宏,優先級最低。
模板宏則能夠做用於全部使用該模板的主機,優先級排在中間。
主機宏則只對單個主機有效,優先級最高。

③ 類型

  宏的類型分爲系統內建的宏用戶自定義的宏
  爲了更強的靈活性,zabbix還支持在全局、模板或主機級別使用用戶自定義宏(user macro)。
  系統內建的宏在使用的時候須要{MACRO}的語法格式,用戶自定義宏要使用{$MACRO}這種特殊的語法格式。
  宏能夠應用在item keys和descriptions、trigger名稱和表達式、主機接口IP/DNS及端口、discovery機制的SNMP協議的相關信息中……
  宏的名稱只能使用大寫字母、數字及下劃線
  進一步信息請參考官方文檔

④ 定義一個宏

  若是咱們想要在咱們的監控項(items)上使用宏,咱們就要先去定義一個宏,而後去建立監控項,直接引用定義好的宏便可。具體操做步驟以下:

1.定義全局宏

  進入 管理 ---> 通常 ---> 右上角選擇宏


  這樣,咱們的全局宏就添加好了。

2.定義監控項,調用宏

  進入 配置 ---> 主機 ---> 全部主機 ---> 監控項 ---> 右上角建立監控項

  填寫完成之後,點擊添加。而後咱們就能夠看到這個調用宏的監控項已經添加成功:

  咱們能夠來查看一下這個監控項如今的狀態:
  進入 監測中 ---> 最新數據

  若是咱們把服務停掉。就會變成down的狀態:

[root@node1 ~]# systemctl stop redis


  發現咱們的監控項是能夠正常使用的。

3.修改宏

  若是咱們把node1節點上的redis服務監聽端口手動改掉的話,咱們剛剛定義的監控項就不能正常使用了,這樣的話,咱們就須要去修改宏。
  可是,這畢竟只是個例,因此咱們不須要去修改全局宏,只用修改模板宏或者主機宏就能夠了。
  下面分別說一下,模板宏和主機宏的不一樣修改操做:
模板宏
  模板宏的修改,咱們須要進入:配置 ---> 模板 ---> redis stats(相應的模板) ---> 宏

  在這裏點擊添加就能夠了。
主機宏
  主機宏的修改,咱們須要進入:配置 ---> 主機 ---> 全部主機 ---> node1 ---> 宏

  在這裏點擊添加就能夠了。


以上,監控的基本知識已經介紹完畢。預知後事如何,請聽下回分解~

因爲部分圖片過大可能不能顯示徹底,可是能夠在瀏覽器新窗口打開喏~打開了的話就是完整的圖了φ(>ω<*)

相關文章
相關標籤/搜索