天天看點

zabbix 監控部署(下)

選擇yum源和安裝版本

由于zabbix每六個月會釋出一個新的穩定版本,在此期間,還會釋出長期支援版LTS (Long Term Support), 長期支援版本往往有較長時間的支援,遇到了問題也能更容易解決,是以如果使用yum安裝的方式,建議使用LTS版本。目前的LTS版本是3.0, 在不久之後将會推出4.0的LTS版本,是以這裡選擇使用zabbix3.0最為示例。系統版本為CentOS7.2。

如果使用手動安裝,需要添加3.0的yum源:

1

<code>yum </code><code>install</code> <code>http:</code><code>//repo</code><code>.zabbix.com</code><code>/zabbix/3</code><code>.0</code><code>/rhel/7/x86_64/zabbix-release-3</code><code>.0-1.el7.noarch.rpm</code>

使用salt安裝的sls檔案(僅供參考):

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

<code>zabbix-server-rhel:</code>

<code>  </code><code>file</code><code>.managed:</code>

<code>    </code><code>- name: </code><code>/tmp/zabbix-release-3</code><code>.0-1.el7.noarch.rpm</code>

<code>    </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/files/zabbix-release-3</code><code>.0-1.el7.noarch.rpm</code>

<code>  </code><code>cmd.run:</code>

<code>    </code><code>- name: rpm -i </code><code>/tmp/zabbix-release-3</code><code>.0-1.el7.noarch.rpm</code>

<code>    </code><code>- unless: </code><code>test</code> <code>-f </code><code>/etc/yum</code><code>.repos.d</code><code>/zabbix</code><code>.repo</code>

<code>zabbix-server-</code><code>install</code><code>:</code>

<code>  </code><code>pkg.installed:</code>

<code>    </code><code>- pkgs:</code>

<code>      </code><code>- httpd</code>

<code>      </code><code>- mariadb-server </code>

<code>      </code><code>- gcc  </code>

<code>      </code><code>- gcc-c++</code>

<code>      </code><code>- glibc </code>

<code>      </code><code>- mariadb-devel </code>

<code>      </code><code>- libxml2-devel </code>

<code>      </code><code>- libcurl </code>

<code>      </code><code>- curl  </code>

<code>      </code><code>- libcurl-devel </code>

<code>      </code><code>- fping</code>

<code>      </code><code>- net-snmp</code>

<code>      </code><code>- net-snmp-libs </code>

<code>      </code><code>- net-snmp-utils  </code>

<code>      </code><code>- net-snmp-devel</code>

<code>      </code><code>- libssh2-devel </code>

<code>      </code><code>- OpenIPMI-devel</code>

<code>      </code><code>- java-1.8.0-openjdk-devel</code>

<code>      </code><code>- zabbix-server-mysql</code>

<code>      </code><code>- zabbix-agent</code>

<code>      </code><code>- zabbix-web</code>

<code>      </code><code>- zabbix-web-mysql</code>

<code>      </code><code>- zabbix-get</code>

<code>    </code><code>- require:</code>

<code>      </code><code>- cmd: zabbix-server-rhel</code>

<code>zabbix-db-config:</code>

<code>    </code><code>- name: </code><code>/etc/my</code><code>.cnf</code>

<code>    </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/files/my</code><code>.cnf</code>

<code>  </code><code>service.running:</code>

<code>    </code><code>- name: mariadb</code>

<code>    </code><code>- </code><code>enable</code><code>: True</code>

<code>      </code><code>- pkg: zabbix-server-</code><code>install</code>

<code>    </code><code>- name: mysql -e </code><code>"DROP USER ''@'localhost';"</code> <code>&amp;&amp; mysql -e </code><code>"DROP USER ''@'$(hostname)'"</code> <code>&amp;&amp; mysql -e </code><code>"DROP DATABASE test"</code> <code>&amp;&amp; mysql -e </code><code>"DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"</code> <code>&amp;&amp; mysql -e </code><code>" create database zabbix;grant all on zabbix.* to zabbix@localhost identified by'zabbix';"</code> <code>&amp;&amp;  mysql -e </code><code>"UPDATE mysql.user SET Password = PASSWORD('zabbix') WHERE User = 'root';"</code> <code>&amp;&amp; mysql -e </code><code>"FLUSH PRIVILEGES"</code>

<code>    </code><code>- onlyif: mysql -e </code><code>"show databases;"</code>

<code>      </code><code>- service: zabbix-db-config</code>

<code>zb-server-db-</code><code>import</code><code>:</code>

<code>    </code><code>- name: zcat </code><code>/usr/share/doc/zabbix-server-mysql-</code><code>*</code><code>/create</code><code>.sql.gz | mysql zabbix -uzabbix -pzabbix</code>

<code>    </code><code>- unless: </code><code>"mysql -uzabbix -pzabbix -e 'select alias from zabbix.users;'"</code>

<code>      </code><code>- cmd: zabbix-db-config</code>

<code>zb-web-config:</code>

<code>    </code><code>- name: </code><code>/etc/httpd/conf</code><code>.d</code><code>/zabbix</code><code>.conf</code>

<code>    </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/files/zabbix</code><code>.conf</code>

<code>    </code><code>- user: root</code>

<code>    </code><code>- group: root</code>

<code>    </code><code>- mode: 644</code>

<code>    </code> 

<code>zb-web-service:</code>

<code>    </code><code>- name: httpd</code>

<code>    </code><code>- reload: True</code>

<code>    </code><code>- </code><code>watch</code><code>:</code>

<code>      </code><code>- </code><code>file</code><code>: zb-web-config</code>

<code>zb-agent-service:</code>

<code>    </code><code>- name: zabbix-agent</code>

<code>zb-server-service:</code>

<code>    </code><code>- name: </code><code>mkdir</code> <code>-p </code><code>/etc/zabbix/alertscripts</code>

<code>    </code><code>- unless: </code><code>test</code> <code>-d </code><code>/etc/zabbix/alertscripts</code>

<code>    </code><code>- name: </code><code>/etc/zabbix/zabbix_server</code><code>.conf</code>

<code>    </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/files/zabbix_server</code><code>.conf</code>

<code>    </code><code>- template: jinja</code>

<code>    </code><code>- defaults:</code>

<code>      </code><code>DBHost: localhost</code>

<code>      </code><code>DBName: zabbix</code>

<code>      </code><code>DBUser: zabbix</code>

<code>      </code><code>DBPassword: zabbix</code>

<code>    </code><code>- name: zabbix-server</code>

對應的配置檔案都放在zabbix/files/目錄下。如果使用手動安裝,可以參照sls檔案中的步驟完成安裝。

使用snmp對交換機進行監控

zabbix 可以通過多種方式對多種裝置進行監控。隻要是支援SNMP協定的裝置,就可以對其進行監控,如我們可以通過zabbix 監控網絡裝置如路由器,交換機,列印機等。對安裝支援snmp的作業系統我們也可以對其進行監控。

簡單介下紹對華為交換機的監控。

檢視交換機支援的SNMP版本,設定團體名:

<code>&lt;sw5752p&gt;display snmp-agent sys-info </code>

<code>   </code><code>The contact person </code><code>for</code> <code>this managed node: </code>

<code>           </code><code>R&amp;D Beijing, Huawei Technologies co.,Ltd.</code>

<code>   </code><code>The physical location of this node: </code>

<code>           </code><code>Beijing China</code>

<code>   </code><code>SNMP version running </code><code>in</code> <code>the system: </code>

<code>           </code><code>SNMPv2c</code>

交換機支援v2c,如果交換機使用的是v3版本或者其他版本可以通過修改交換機版本,也可以配置的方式來使用snmpv3。

更改為v2c 版本:

<code>[sw5752p]undo snmp-agent sys-info version v3</code>

<code>[sw5752p]snmp-agent sys-info version v2c</code>

配置團體名:

<code>[sw5752p]snmp-agent community </code><code>read</code> <code>sw5752-public</code>

在zabbix伺服器上,我們可以通過snmp相關指令來擷取交換機的狀态資訊:

<code># snmpwalk -v 2c -c sw5752-public 192.168.1.2 sysUpTime.0</code>

<code>DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (197075041) 22 days, 19:25:50.41</code>

在zabbix 上添加交換機為一個host,選擇snmp:

<a href="https://s3.51cto.com/oss/201710/31/f35b40518c52ed02726ac8dd190dff10.jpg" target="_blank"></a>

添加需要的模闆:

<a href="https://s1.51cto.com/oss/201710/31/15737544725082427d37b41a640bcc0b.jpg" target="_blank"></a>

設定團體名:

<a href="https://s5.51cto.com/oss/201710/31/3065611f6f5545c07205a23d8b40e66a.jpg" target="_blank"></a>

在主機界面,我們可以看到已經添監控中:

使用agent 對主機進行監控

在大多數情況下,我們都會使用zabbix的agent來監控服務狀态。需要對被監控的用戶端安裝agent,并配置它與服務端通信。

1、安裝agent

在zabbix的官方網站上下載下傳與服務端對應版本的agent安裝包進行安裝。

安裝完成後,我們需要修改配置檔案,讓它與主機通信,再此之前需要統一主機名,主機名要可識别。

修改之後,配置檔案要有如下幾個參數:

<code>[root@node2 ~]</code><code># grep "^[a-Z]"/etc/zabbix/zabbix_agentd.conf</code>

<code>PidFile=</code><code>/var/run/zabbix/zabbix_agentd</code><code>.pid</code>

<code>LogFile=</code><code>/var/log/zabbix/zabbix_agentd</code><code>.log</code>

<code>LogFileSize=0</code>

<code>Server=192.168.1.3  </code><code>#服務端主機IP</code>

<code>ServerActive=192.168.1.3   </code><code>#服務端主機IP</code>

<code>Hostname= node2   </code><code>#本機主機名</code>

<code>Include=</code><code>/etc/zabbix/zabbix_agentd</code><code>.d/*.conf   </code><code>#自定義配置檔案路徑</code>

<code>#UserParameter=login-users,uptime|awk -F" " '{print $6}'  #此行為自定義,預設注釋狀态</code>

 如果用戶端配置了iptables,需要加入一條iptables規則:

<code>iptables -A INPUT -m state --stateNEW -m tcp -p tcp --dport 10050 -j ACCEPT</code>

啟動用戶端服務.

2、在服務端加入要監控的用戶端伺服器

打開服務端web管理界面,預設賬戶為Admin, 密碼為 zabbix

建立一個主機組:

<a href="https://s1.51cto.com/oss/201710/31/89031720b1982eec5bf0893ce55d99e0.jpg" target="_blank"></a>

如果此時沒有主機,這不會有選擇清單,這裡可以看到之前所建立的主機:

<a href="https://s5.51cto.com/oss/201710/31/f991b39bff9df91e4b6edada203714d7.jpg" target="_blank"></a>

設定主機資訊和所屬組:

<a href="https://s2.51cto.com/oss/201710/31/b9a6b7867b76ecd4ebe3328f61c99b0f.jpg" target="_blank"></a>

在zabbix3.0版本中,會預設添加本地的bases模闆,在低版本中需要手動搜尋OS Linux模闆添加,這兩者都是一樣的,在此模闆中會對一些基礎的伺服器狀态進行監控:

<a href="https://s1.51cto.com/oss/201710/31/5ef3a295df6d33a04c92c1591639706c.jpg" target="_blank"></a>

自定義監控項

自定義監控項需要有兩個主要步驟:

修改配置檔案,編寫自定義監控内容。

在server端加上自定義的監控key值。

1、例如我們要加入一個監控,監控目前狀态下系統有多少人同時登入(系統自帶的模闆也有此功能)

可以使用此指令來擷取使用者的實時線上數量:

<code>uptime|</code><code>awk</code> <code>-F </code><code>" "</code><code>'{print $4}'</code>

 修改配置檔案:

vim /etc/zabbix/zabbix_agentd.conf

找到UserParameter這一行,打開注釋,設定監控的鍵值和擷取鍵值的方式:

UserParameter=login-users,uptime|awk-F " " '{print $6}'

文法說明:

UserParameter=KEY,COMMAND

定義一個鍵值,後面為獲得此鍵值的執行指令,鍵值的命名對于整個系統必須是唯一的,兩者之間逗号隔開,指令也可以是腳本。使用者自定義的資料最大可以傳回512KB的資料。

提示:如果系統需要自定義多個模闆,可以單獨建立一個檔案,存放路徑Include=/usr/local/etc/zabbix_agentd.userparams.conf

配置完成之後,重新開機zabbix-agent.

2、配置server端

首先在server測試看能否擷取到agent端所傳回的KEY值,server端上執行:

使用zabbix-get指令:

zabbix_get -s 192.168.1.10 -klogin-users

如果傳回值正常,則key 添加成功。

打開server web配置界面,在用戶端主機上添加監控項:

建立監控項目:

<a href="https://s2.51cto.com/oss/201710/31/551549e610b93d59ac00ea5f43fd7099.jpg" target="_blank"></a>

<a href="https://s2.51cto.com/oss/201710/31/f8ab9e4bccdefc89c8bc0487f9bc4673.jpg" target="_blank"></a>

添加成功後,在這個用戶端的items中就可以看到添加的選項:

<a href="https://s5.51cto.com/oss/201710/31/d6f2d3cef22bf749dc07925ddfaa2933.jpg" target="_blank"></a>

建立主機圖形:

<a href="https://s3.51cto.com/oss/201710/31/a7a84634e018630099ae038a283a12b7.jpg" target="_blank"></a>

<a href="https://s1.51cto.com/oss/201710/31/87b2f9cfecc8c1f69b3f106291b0d768.jpg" target="_blank"></a>

添加剛剛建立的監控項,可以自定義圖形的樣式:

<a href="https://s1.51cto.com/oss/201710/31/ea9381e485e2872f61f2e3639780bf12.jpg" target="_blank"></a>

此時通過監控的主界面,進入圖形界面,就可以直接看到系統繪制的狀态圖:

<a href="https://s3.51cto.com/oss/201710/31/80c3ff04a5584a3e1dc167880efb71f6.jpg" target="_blank"></a>

 建立觸發器

當監控的項目到某一個門檻值時,需要觸發一些動作,下面觸發器:

<a href="https://s4.51cto.com/oss/201710/31/d30fde19899bbf05f89c6887596211be.jpg" target="_blank"></a>

進入觸發器的配置界面,點選添加規則按鈕就可以設定觸發規則:

<a href="https://s5.51cto.com/oss/201710/31/431dbea56b5eed6cee0b9680f5571d94.jpg" target="_blank"></a>

觸發器規則配置界面:

<a href="https://s4.51cto.com/oss/201710/31/1d3fa2f9d42291d533b8d893b7827bb1.jpg" target="_blank"></a>

添加成功後,檢視添加的項目:

<a href="https://s5.51cto.com/oss/201710/31/0dec1099fe7a85ac2dcad549aad9456e.jpg" target="_blank"></a>

可以對建立的觸發器添加報警聲音:在userprofile,中設定即可。

<a href="https://s4.51cto.com/oss/201710/31/7df6d1287f92bd02a49ea28aab57d17e.jpg" target="_blank"></a>

建立觸發行為:當出現故障時,條件觸發報警行為時,自動發送郵件或者手機短信報警。

系統預設自帶了一個未被啟用的模闆,可以重新編輯此模闆,也可以添加一個新的模闆來定義action的行為。

<a href="https://s3.51cto.com/oss/201710/31/97a45308a2c391bf478ff3645969c133.jpg" target="_blank"></a>

<a href="https://s3.51cto.com/oss/201710/31/e6d02eae9c3aabdc6889c334db57dc08.jpg" target="_blank"></a>

然後定義發送的内容和收件人:

<a href="https://s4.51cto.com/oss/201710/31/0c89051a377c157fdf3cbe781eaf0f79.jpg" target="_blank"></a>

<a href="https://s1.51cto.com/oss/201710/31/e475b7fbd805d1fce6d71e3438d597a3.jpg" target="_blank"></a>

自定義媒體媒體:在系統中預設自帶的有mail,短信等報警通知機制,一般常用的是mail功能.

<a href="https://s5.51cto.com/oss/201710/31/ed71acf5dd7a8df4d3071a53f9514ec3.jpg" target="_blank"></a>

這裡定義的是發件箱的資訊,在admin賬戶中,我們還要配置收件箱的資訊:

<a href="https://s5.51cto.com/oss/201710/31/7cca194e92d3c599803d22de2e950481.jpg" target="_blank"></a>

我們也可以通過編寫一個發郵件的腳本或者程式來實作,在系統中配置上執行此腳本的觸發機制就可以了。

<a href="https://s2.51cto.com/oss/201710/31/8c864c367a57a097a173f750b89331b0.jpg" target="_blank"></a>

ZABBIX3.0以上的版本需要自定義三個腳本參數,才可以将郵件資訊傳入腳本:

<a href="https://s5.51cto.com/oss/201710/31/012861788bd0c80dc09d7b62ad76a73b.jpg" target="_blank"></a>

<a href="https://s4.51cto.com/oss/201710/31/3b68e855fad41b3483d8b11f6e79e1c3.jpg" target="_blank"></a>

在server端建立此腳本并加上執行權限,這個腳本的存放路徑,在zabbix的配置檔案中可以指定:

# grep"AlertScriptsPath"/usr/local/zabbix_server/etc/zabbix_server.conf|grep -v "#"

AlertScriptsPath=/etc/zabbix/alertscripts

将發郵件或者任何動作的腳本放在此目錄下,也可以直接使用python編寫發郵件的腳本。

注意:腳本中一定要接受三個參數 $1  $2  $3,分别為收件人,發送的主題和内容。對應的參數是 {ALERT.SENDTO}  {ALERT.SUBJECT}  {ALERT.MESSAGE} 

編輯使用者屬性,指定發送報警資訊的方式:

對于不同的組,如果有新加的裝置和伺服器,要添權重限給組,否則其他的組成員無法管理這些新加裝置:

<a href="https://s2.51cto.com/oss/201710/31/8eac04c1b084f950fbb8593d88180f8e.jpg" target="_blank"></a>

當設定的報警被觸發成功後,會提示已經發送成功:

<a href="https://s3.51cto.com/oss/201710/31/a4a6ca1aa9a8df2c1ce195e08cf5b695.jpg" target="_blank"></a>

如果這裡沒有設定成功,看一下action模闆是否開啟,actions中設定是否正确,檢視系統日志資訊:

 tail -f /var/log/zabbix/zabbix_server.log

附上郵件python發送腳本:

<code>#! /usr/bin/envpython</code>

<code># coding:utf-8</code>

<code> </code> 

<code>from</code> <code>email importencoders</code>

<code>from</code> <code>email.headerimport Header</code>

<code>fromemail.mime.text </code><code>import</code> <code>MIMEText</code>

<code>from</code> <code>email.utilsimport parseaddr, formataddr</code>

<code>import</code> <code>smtplib</code>

<code>import</code> <code>sys</code>

<code>defsend_mail(_to_email,_subject,_message):</code>

<code>        </code><code>smtp_host </code><code>=</code> <code>'smtp.ym.163.com'</code>        <code>#郵箱伺服器</code>

<code>        </code><code>from_email </code><code>=</code> <code>'[email protected]'</code>   <code>#使用者名</code>

<code>        </code><code>passwd </code><code>=</code> <code>'12345password'</code>              <code>#密碼</code>

<code>        </code><code>msg </code><code>=</code><code>MIMEText(_message,</code><code>'plain'</code><code>,</code><code>'utf-8'</code><code>)</code>

<code>        </code><code>msg[</code><code>'Subject'</code><code>] </code><code>=</code> <code>_subject</code>

<code>        </code><code>smtp_server </code><code>=</code><code>smtplib.SMTP_SSL(smtp_host,</code><code>994</code><code>)   </code><code># 994為開啟SSL的端口号</code>

<code>        </code><code>smtp_server.login(from_email,passwd)</code>

<code>       </code><code>smtp_server.sendmail(from_email,[_to_email],msg.as_string())</code>

<code>        </code><code>smtp_server.quit()</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code><code>'__main__'</code><code>:</code>

<code>       </code><code>send_mail(sys.argv[</code><code>1</code><code>],sys.argv[</code><code>2</code><code>],sys.argv[</code><code>3</code><code>])</code>

自定義模闆

對于一些系統不帶的監控項目,我們需要自定義一個模闆,然後在模闆中添加自定義的監控項目。

<a href="https://s2.51cto.com/oss/201710/31/72d0e5fa90561881a44528de8c0f6395.jpg" target="_blank"></a>

<a href="https://s5.51cto.com/oss/201710/31/4fcce13850f97f9445353b6b49460e54.jpg" target="_blank"></a>

之後就可以給目前自定義的模闆添加 applications,items,trigger等元件.

注意:這裡自定義的模闆裡所加的自定義監控項中,如果是需要修改agent端的配置檔案,那麼所有使用這個模闆的agent端都要修改配置,可以将配置資訊編寫成單獨檔案和腳本都放在系統設定的路徑下。

# grep "Include"/etc/zabbix/zabbix_agentd.conf

Include=/etc/zabbix/zabbix_agentd.d/*.conf

zabbix 用戶端主動模式配置

在zabbix的預設配置中,agent端是被動模式的,server端是主動模式,server端主動發送請求給agent端擷取需要的資料,但是當我們有大量的機器需要監控時,僅僅依靠server端去大量的主動發送資料請求是不合适的,是以需要配置agent端主動發送資料給server端才是最佳的方案。

在配置agent端為主動模式時,需要兩步操作:

克隆需要的模闆,并将模闆類型從agent 改為 agent-active狀态。

修改agent端的配置檔案,注釋掉被動模式配置,打開主動模式配置,并設定Activeserver.

 本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1977879