監控的意義:防範事故於未然、沒有故障的時候,收集數據。
有故障就報警監控的選擇上:
1.使用開源的–》成本低、技術實力相對低
2.自研–》自己研發–)投入大、技術水平要求高—》小米
zabbix–》cacti和nagios的結合體,圖形和指令碼都比較好–》大獲全勝、搶佔市場
https://www.zabbix.com/cn/
普羅米修斯
介紹zabbix工作的原理的:
https://www.cnblogs.com/mysql-dba/p/5e10902.html
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 分佈式監控
zabbix agentd:代理程式–》間課程式–》採集:os、裝置、應用程式、數據庫資訊
zabbix_agentd.conf–》組態檔
zabbix_agentd.log–>日誌檔案
數據庫:mysql、mariadb
展現:web方式–》php語言開發的web介面到數據庫裡拿數據展示給使用者–》使用者使用瀏覽器去看
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
準備至少兩臺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的平均負載
如果所示說明連線成功
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只能顯示靜態頁面,這是一個大坑,值得銘記
4.安裝zabbix頁面
設定頁面必須全綠才能 纔能,如果有失敗的那麼需要進行排錯一般是都是zabbix的變數問題,數據欄是新增設定的數據庫密碼zabbix123就可以了
預設的登錄的使用者名稱和密碼是Admin和zabbix
登錄成功,顯示如下頁面發現安裝成功
選項web圖形概念 | 解釋 |
---|---|
應用集 | 一類有共同特點的監控項的集合 |
監控項 | 被監控的服務 |
觸發器 | 當某個監控項到達某個設定的值可以觸發報警 |
圖形 | 將採集到的數值進行圖形化顯示 |
自動發現 | 每個一定時間自動採集 |
模板 | 有很多的應用集,裏面有很多的監控項 |
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
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
有數值返回則成功
建立db主機羣組
對db_mysql建立主機
對db_mysql建立應用集
對db_mysql建立監控項
建立圖形
這樣就可以檢視圖形了,圖中的虛線是定義的觸發器當超過這個線會觸發報警
這裏對db_mysql主機定義一個若連線大於3則報警的觸發器
當連線大於大於或等於4的時候,觸發災難報警,顯示如下則設定成功
`