zabbix監控服務搭建mysql與nginx定製監控

2020-08-07 23:03:21

1.監控的意義

監控的意義:防範事故於未然、沒有故障的時候,收集數據。

有故障就報警監控的選擇上:
1.使用開源的–》成本低、技術實力相對低

2.自研–》自己研發–)投入大、技術水平要求高—》小米

2.常見的開源的監控軟體的名字:

zabbix–》cacti和nagios的結合體,圖形和指令碼都比較好–》大獲全勝、搶佔市場

https://www.zabbix.com/cn/

普羅米修斯
介紹zabbix工作的原理的:
https://www.cnblogs.com/mysql-dba/p/5e10902.html

3.zabbix的介紹

Zabbix 是一個企業級的分佈式開源監控方案。 zabbix就是一個監控軟體。
Zabbix是一款能夠監控各種網路參數以及伺服器健康性和完整性的軟體。
Zabbix是免費的。

Zabbix 是由 Alexei Vladishev 開發的一種網路監視、管理系統,基於 Server-Client 架構。可用於監視各種網路服務、伺服器和網路機器等狀態。

zabbix由2部分構成,zabbix server與可選元件zabbix agent。

zabbix server可以通過SNMP,zabbix agent,ping,埠監視等方法提供對遠端伺服器/網路狀態的監視,數據收集等功能,它可以執行在路由器和交換機、Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平臺上。

採集數據:zabbix agent

儲存數據:mysq1,mariadb

展示數據:web方式–》httpd、nginx

動態語言:PHP

CLI:command line interface 命合行介面
GUI:graphic user interface 使用者圖形介面–》點滑鼠

介紹zabbix工作的原理的:
https://www.cnblogs.com/mysql-dba/p/5010902.html

zabbix是一個開源分佈式監控軟體(cpu 記憶體 磁碟 網路 服務),由4個部分組成

1.zabbix-server

2.zabbix-client

3.database

4.zabbix-web gui

5.proxy 分佈式監控

4.zabbix設定

zabbix agentd:代理程式–》間課程式–》採集:os、裝置、應用程式、數據庫資訊
zabbix_agentd.conf–》組態檔
zabbix_agentd.log–>日誌檔案

數據庫:mysql、mariadb
展現:web方式–》php語言開發的web介面到數據庫裡拿數據展示給使用者–》使用者使用瀏覽器去看

5.各種網站環境

LNMP:Linux nginx MySQL php/python/per1–>整合開發環境
LAMP:Linux apache MySQL php/python/perl
WAMP:windows apache MySQL php
WNMP:windows nginx MysQL php
php和網站相關的技術結合更緊密–)html和js、css

6.ZAbbix安裝

準備至少兩臺cent os7主機,儘量讓自己系統屬於純淨環境,安裝zabbix_server (Zabbix) 4.4.6

server ip :192.168.0.66

agent ip: 192.168.0.212

一臺作爲server端 一臺作爲agent端
1.關閉防火牆 sellinux

關閉防火牆

service firewalld stop
systemctl disable firewalld

關閉selinux

vi /etc/selinux/config 
將SELINUX=disabled

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

退出並儲存

或者setenforce 0  臨時禁用修改selinux

2.匯入軟體 ,解壓縮

centos7-software-zabbix.zip
如果沒有unzip命令 執行yum install unzip

unzip  centos7-software-zabbix.zip

3.安裝server端

 cd centos7-software-zabbix

在这里插入图片描述

首先安裝epel-release
yum install  epel-release

安裝所有zabbix包
yum install zabbix-*  

4.agent端安裝

將zabbix-agent-4.4.6-1.el7.x86_64.rpm傳輸到agent端
scp zabbix-agent-4.4.6-1.el7.x86_64.rpm [email protected]:~

在agent端執行
yum install zabbix-agent-4.4.6-1.el7.x86_64.rpm

5.安裝並啓動mariadb和nginx

 yum install mariadb  mariadb-server -y
 
 service mariadb start  啓動mariadb
 systemctl enable  mariadb  設定開機自啓
 
 yum install nginx -y
 
 service nginx start  啓動mariadb
 systemctl enable nginx  設定開機自啓
 

ps aux|grep mysql檢視進程
在这里插入图片描述

6.進入mariadb 環境設定

mysql -uroot -p  預設mariadb安裝好,是沒有密碼的

create database zabbix character set utf8 collate utf8_bin; 建庫zabbix,指定字元集爲utf8

show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| zabbix             |
+--------------------+

grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix123';
新建一個使用者zabbix@localhost 密碼爲zabbix123 可以有所有的許可權在zabbix這個庫裡的所有的表上


匯入數據到MySQL數據庫裡的zabbix庫
cd /usr/share/doc/zabbix-server-mysql-4.4.6/

[root@zabbix zabbix-server-mysql-4.4.6]# ls
AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README

gunzip create.sql.gz 

mysql -uzabbix -p'zabbix123' zabbix  < create.sql 

或者使用下面 下麪的命令完成數據的匯入
 zcat /usr/share/doc/zabbix-server-mysql-4.0.10/create.sql.gz |mysql -uzabbix -pzabbix123 zabbix

7.修改Zabbix的設定

 在zabbix_server.conf中編輯數據庫設定
 vi /etc/zabbix/zabbix_server.conf
 預設修改這四個
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix123

如果你的數據庫是編譯安裝的mysql 那麼就設定以下兩個
DBSocket=/data/mysql/mysql.sock  mysql編譯安裝預設會把本地socket從tmp目錄放到/data/mysql/下 因此需要手動指定本地socket位置 才能 纔能進行連線
DBPort=3306 指定連線埠

8.啓動Zabbix Server 進程

啓動Zabbix Server進程
service zabbix-server start

ps aux|grep zabbix  說明zabbix已經啓動
zabbix    48631  0.0  0.1 257624  3384 ?        S    15:26   0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
root      48634  0.0  0.0 112724   988 pts/0    S+   15:26   0:00 grep --color=auto zabbix

並在系統啓動時讓它自啓:
systemctl enable zabbix-server

9.修改php-fpm檔案
php_value[date.timezone] 修改爲Asia/Shanghai

php-fpm 提供php頁面解析的程式--》php直譯器,nginx只提供靜態頁面解析


vim  /etc/php-fpm.d/zabbix.conf 

php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000
php_value[date.timezone] = Asia/Shanghai  


10.啓動相關環境

# systemctl restart zabbix-server zabbix-agent httpd php-fpm mariadb
# systemctl enable zabbix-server zabbix-agent  httpd  php-fpm mariadb

使用nginx --》LNMP環境
# systemctl restart zabbix-server zabbix-agent nginx php-fpm   mariadb
# systemctl enable zabbix-server zabbix-agent  nginx  php-fpm   mariadb

11.修改agent端的組態檔

在agent端

vim /etc/zabbix/zabbix_agentd.conf 

Server=192.168.0.66  #修改爲允許來採集數據的伺服器ip,不然下面 下麪的zabbix_get命令不能去採集數據
ServerActive=192.168.0.66

service zabbix-agent restart  重新整理服務

12.測試連通情況

zabbix_get -s 192.168.0.212 -p 10050 -k "system.cpu.load[all,avg1]"

zabbix_get 是一個server端獲取用戶端數據的工具
 -s 192.168.111.131 指定用戶端的ip地址
 -p 10050  zabbix-agentd程式預設開發的埠號

-k "system.cpu.load[all,avg1]"  指定獲取的值--》key--》系統裡的cpu的平均負載

如果所示說明連線成功

在这里插入图片描述

搭建web頁面

1.修改nginx設定

vim /etc/nginx/conf.d/
將listen 和server_name 改爲如下情況

server {
        listen          80;    #監聽的埠號
        server_name     www.setup.com;  #虛擬主機(網站服務的域名)

        root    /usr/share/zabbix;   #這裏存放着zabbix的網頁

        index   index.php;   #網站的首頁

        location = /favicon.ico {
                log_not_found   off;
        }
        .....
      
重新啓動nginx
service  nginx restart

2.在windows本機的hosts檔案中系結域名

cd C:\Windows\System32\drivers\etc
在hosts檔案裡新增,注意這裏要要有本機環境

192.168.0.66  www.setup.com     ip是server端IP

3.瀏覽器輸入www.setup直接存取,出現如下頁面說明系結成功
在这里插入图片描述

注意我這裏碰到一個問題那就是,我輸入域名竟然是下面 下麪的頁面,經檢查原來是我php-fpm,沒有啓動起來,這就導致只解析了靜態頁面,而/etc/nginx/conf.d/裡重定向的zabbix的php檔案無法獲得解析,那麼nginx只能顯示靜態頁面,這是一個大坑,值得銘記

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hy7faO5n-1596811667122)(C:\Users\黄丕贤\AppData\Roaming\Typora\typora-user-images\image-20200721212200541.png)]

4.安裝zabbix頁面

設定頁面必須全綠才能 纔能,如果有失敗的那麼需要進行排錯一般是都是zabbix的變數問題,數據欄是新增設定的數據庫密碼zabbix123就可以了

預設的登錄的使用者名稱和密碼是Admin和zabbix

登錄成功,顯示如下頁面發現安裝成功
在这里插入图片描述

關於zabbix5的介紹

  • https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/frontend/
  • https://www.it610.com/article/1283296687791554560.htm
  • http://blog.cactifans.com/2020/05/17/Zabbix-5.0-LTS-%E7%89%88%E6%9C%AC%E5%AE%89%E8%A3%85/
  • https://www.zabbix.com/documentation/current/manual/installation/requirements

7.zabbix web頁面使用

選項web圖形概念 解釋
應用集 一類有共同特點的監控項的集合
監控項 被監控的服務
觸發器 當某個監控項到達某個設定的值可以觸發報警
圖形 將採集到的數值進行圖形化顯示
自動發現 每個一定時間自動採集
模板 有很多的應用集,裏面有很多的監控項

8.zabbix監控nginx

zabbix來監控nginx服務物件

​ 1.nginx服務是否在執行
​ 2.請求數量

實現步驟

1.在需要監控的agent端安裝nginx服務

yum install epel-release -y
yum  install nginx -y

2.啓動nginx服務

[root@nginx-mysqldb nginx]# service nginx start
Redirecting to /bin/systemctl start nginx.service

3.在zabbix-agent端的linux伺服器上的nginx的主組態檔裡新增下面 下麪的設定項,開啓nginx的統計功能

vim /etc/nginx/nginx.conf

#開啓nginx本身的統計功能
location /nginx_status {
    stub_status on;
    }

4.重新整理nginx服務

service nginx restart

5.web方式存取,檢視效果

http://本機ip/nginx_status

輸出效果如下所示:
Active connections: 2 
server accepts handled requests
 18 18 23 
Reading: 0 Writing: 1 Waiting: 1 

Active connections  Nginx正處理的活動鏈接數個數;重要
accepts             Nginx啓動到現在共接受了多少個連線。
handled             Nginx啓動到現在共處理了多少個連線。 
requests            Nginx總共處理了請求次數。
Reading             Nginx讀取到用戶端的 Header 資訊數。
Writing             Nginx返回給用戶端的 Header 資訊數。
Waiting             Nginx已經處理完正在等候下一次請求指令的駐留鏈接,開啓。
Keep-alive的情況下,Waiting這個值等於active-(reading + writing)。
請求丟失數=(握手數-連線數)可以看出,本次狀態顯示沒有丟失請求。
提供以下狀態資訊:

Active connections
當前活動的用戶端連線數,包括Waiting連線數。
accepts
接受的用戶端連線總數。
handled
已處理的連線總數。通常,參數值與accepts 除非達到某些資源限制(例如, worker_connections限制)相同。
requests
用戶端請求總數。
Reading
nginx正在讀取請求檔頭的當前連線數。
Writing
nginx正在將響應寫回到用戶端的當前連線數。
Waiting
當前等待請求的空閒用戶端連線數

6.zabbix-agent的nginx參數組態檔

進入/etc/zabbix/zabbix_agentd.d資料夾
建立userparameter_nginx.conf 
寫入
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx.sh $1

建立nginx.sh 
#ip爲本機ip
HOST="192.168.1.141" 
    PORT="80"
    function ping {
        /sbin/pidof nginx | wc -l
    }

    function active {
        /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
    }
    function reading {
        /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
    }
    function writing {
        /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
    }
    function waiting {
        /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
    }
    function accepts {
        /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
    }
    function handled {
        /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
    }
    function requests {
        /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
    }

    case $1 in
        active)
            active
            ;;
        reading)
            reading
            ;;
        writing)
            writing
            ;;
        waiting)
            waiting
            ;;
        accepts)
            accepts
            ;;
        ping)
            ping
            ;;
        handled)
            handled
            ;;
        requests)
            requests
            ;;
esac


改良版本的nginx_vs.sh的採集數據的指令碼
HOST="192.168.1.141"
PORT="80"

    case $1 in
        active)
           /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
            ;;
        reading)
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
            ;;
        writing)
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
            ;;
        waiting)
             /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
            ;;
        accepts)
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
            ;;
        ping)
             /sbin/pidof nginx | wc -w
            ;;
        handled)
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
            ;;
        requests)
             /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
            ;;
esac

8.授予nginx.sh可執行許可權

chmod +x nginx.sh 

9.重新整理zabbix-agent服務

service zabbix-agent restart

10.在zabbix-server上測試是否可以採集數據

zabbix_get -s 192.168.111.133  -p 10050 -k nginx.status[active]  

active是作爲參數傳入指令碼,也可以傳入其他的選項,  192.168.111.133是指定採集的nginx伺服器ip

9.Zabbix監控mysql

server端:192.168.0.75

agent端(mysql監控端):192.168.0.212

操作未說明在server端那那全部都是agent的操作

1.安裝mysql或者mariadb

yum install mariadb mariadb-server -y 

2.啓動mariadb,並且設定開機啓動

systemctl start mariadb
systemctl enable mariadb

3.檢視是否啓動

lsof -i:3306
ps aux|grep mysql
netstat -anplut|grep mysql

4.檢查系統安全策略是否關閉

檢查下selinu和防火牆是否關閉
getenforce
iptables -L

5.進入/etc/zabbix/zabbix_agentd.d資料夾

建立userparameter_mysql.conf 新增(注意這裏第2行和第三行要併成一行)

UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/mysql_status.sh $1
UserParameter=mysql.ping,/usr/bin/mysqladmin -ucali -p'cali123456' -h localhost ping 2>/dev/null | grep -c alive
UserParameter=mysql.version,/usr/bin/mysql -V
UserParameter=mysql.bytes_sent,/etc/zabbix/zabbix_agentd.d/mysql_status.sh $1

一行一個對應的參數,可以新增很多行,也就是很多參數,方便zabbix-server和zabbix-agent之間溝通

UserParameter=mysql.bytes_sent 是zabbix-server後面採集數據傳遞的參數  mysql.bytes_sent

/etc/zabbix/zabbix_agentd.d/mysql_status.sh $1  是接受到mysql.bytes_sent後,zabbix-agent需要執行的命令

建立mysql_status.sh

#!/bin/bash 
#Desc:zabbix 監控 MySQL 狀態
#Date:2020-3-19
#by:cali

#主機
HOST="localhost"
#使用者
USER="使用者名稱"
#密碼
PASSWORD="密碼"
#埠
PORT="3306"
#MySQL連線
CONNECTION="mysqladmin -h ${HOST} -u ${USER} -P ${PORT} -p${PASSWORD}"

if [ $# -ne "1" ];then
    echo "arg error!"
fi

case $1 in
    Uptime)
        result=`${CONNECTION} status 2>/dev/null |awk '{print $2}'`
        echo $result
        ;;
    Questions)
        result=`${CONNECTION} status 2>/dev/null |awk '{print $6}'`
        echo $result
        ;;
    Com_update)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_update" |awk '{print $4}'`
        echo $result
        ;;
    Slow_queries)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Slow_queries" |awk '{print $4}'`
        echo $result
        ;;
    Com_select)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_select" |awk '{print $4}'`
        echo $result
        ;;
    Com_rollback)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_rollback" |awk '{print $4}'`
        echo $result
        ;;
    Com_insert)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_insert" |awk '{print $4}'`
        echo $result
        ;;
    Com_delete)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_delete" |awk '{print $4}'`
        echo $result
        ;;
    Com_commit)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_commit" |awk '{print $4}'`
        echo $result
        ;;
    Bytes_sent)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Bytes_sent" |awk '{print $4}'`
        echo $result
        ;;
    Bytes_received)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Bytes_received" |awk '{print $4}'`
        echo $result
        ;;
    Com_begin)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_begin" |awk '{print $4}'`
        echo $result
        ;;
    Threads_connected)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Threads_connected" |awk '{print $4}'`
        echo $result
        ;;
        *)
        echo "Usage:$0(Uptime|Questions|Com_update|Slow_queries|Com_select|Com_rollback|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin|Threads_connected)"
        ;;
esac

6.給指令碼可執行許可權

chmod +x mysql_status.sh

7.mysql授權存取

登錄mysql

grant all privileges on *.* to 賬號@'%' identified by ‘自己的密碼’


8.檢視是否能獲得數據

mysqladmin  -h localhost -u(you user) -p'password' -P 3306 version


mysqladmin  Ver 9.1 Distrib 10.3.17-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version		10.3.17-MariaDB
Protocol version	10
Connection		Localhost via UNIX socket
UNIX socket		/var/lib/mysql/mysql.sock
Uptime:			27 min 50 sec

Threads: 8  Questions: 42  Slow queries: 0  Opens: 37  Flush tables: 1  Open tables: 31  Queries per second avg: 0.025

9.建立postion.sh

echo  "位置變數的個數:  $#"
echo "位置變數的內容:  $*"
echo  "第1個位置變數: $1"
echo  "第2個位置變數: $2"
echo  "第3個位置變數: $3"

chmod +x postion.sh

10.重新啓動agent服務

service zabbix-agent restart

11.伺服器端檢視是否能收集到數據,說明採整合功

zabbix_get -s 192.168.0.212  -k mysql.status[Uptime]

2754
有數值返回則成功

10.建立建立視覺化操作

建立db主機羣組

對db_mysql建立主機


在这里插入图片描述

在这里插入图片描述

對db_mysql建立應用集
在这里插入图片描述

對db_mysql建立監控項

在这里插入图片描述
在这里插入图片描述

建立圖形

在这里插入图片描述
在这里插入图片描述

這樣就可以檢視圖形了,圖中的虛線是定義的觸發器當超過這個線會觸發報警

在这里插入图片描述

這裏對db_mysql主機定義一個若連線大於3則報警的觸發器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
當連線大於大於或等於4的時候,觸發災難報警,顯示如下則設定成功
在这里插入图片描述

`