1.什么是監(jiān)控
監(jiān)視,控制
2.為什么要做監(jiān)控
教室: 監(jiān)控學(xué)員的學(xué)生狀況
超市: 防偷
馬路: 事故(事后追溯)
監(jiān)控: 本質(zhì)上是 行為
系統(tǒng)為什么要做監(jiān)控:
監(jiān)控是整個運維乃至整個產(chǎn)品生命周期中最重要的一環(huán).
事前及時預(yù)警發(fā)現(xiàn)故障饵筑,事后提供詳實的數(shù)據(jù)用于追查定位問題。
3.監(jiān)控怎么做,比如我要監(jiān)控內(nèi)存的使用率,低于百分之20則報警
1.提取內(nèi)存的指標
2.判斷比對 ,與管理人員設(shè)定的閾值
3.大于百分之20, 則忽略
4.小于百分之20, 則觸發(fā)警告
4.監(jiān)控有哪些工具來輔助實現(xiàn)
cacti 用于監(jiān)控網(wǎng)絡(luò)設(shè)備 交換機 路由器 防火墻 流量為主
Nagios 用于監(jiān)控系統(tǒng)
Zabbix 用于監(jiān)控系統(tǒng) web界面 分布式 報警 自帶模板
open-falcon 小米公司
Prometheus+grafana
5.如何著手監(jiān)控
1.硬件監(jiān)控 ( 交換機 路由器 防火墻 服務(wù)器 ) DELL IRDAC ipmi
2.系統(tǒng)監(jiān)控 ( CPu 內(nèi)存 磁盤 IO )
3.服務(wù)監(jiān)控 ( nginx php mysql tomcat ....... )
4.日志監(jiān)控 ( ELK 架構(gòu) )
5.web監(jiān)控 ( 請求延時 響應(yīng)延時 加載時間 ..... pv uv ip )
6.業(yè)務(wù)監(jiān)控 新增用戶 流量 購買量
7.分布式監(jiān)控 多機房監(jiān)控 proxy
8.自動化監(jiān)控 自動的添加主機進行監(jiān)控
6.單機時代如何監(jiān)控
命令監(jiān)控
監(jiān)控層面:
cpu: top htop
內(nèi)存: free -m 大量消耗內(nèi)存會占用swap,如果沒有swap 則會觸oom
磁盤: df -h 空間 iotop
網(wǎng)絡(luò): ifconfig route iftop nethogs nethogs -v 3
glances 工具
引用shell腳本 + crond 定時任務(wù) (監(jiān)控當前系統(tǒng)用戶登錄的數(shù)量 超過4 則報警)
for ip in {7..9}
do
users=$(ssh root@172.16.1.$ip "who|wc -l")
if [ $user -ge 3 ];then
echo "報警通知 172.16.1.$ip"
fi
done
--------------------------------引入zabbix監(jiān)控----------------------------------------
4.安裝zabbix4.0
1.配置yum倉庫
rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
2.安裝zabbix相關(guān)功能組件
DNS地址變更,網(wǎng)絡(luò)快可忽略
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1="8.8.4.4"
systemctl restart network
安裝php72w 依賴httpd環(huán)境陋桂,安裝php72
yum -y install php* --skip-broken
避免網(wǎng)絡(luò)延遲導(dǎo)致失敗時使用,多次嘗試下載
yum install zabbix-server-mysql zabbix-web-mysql httpd mariadb-server -y
yum install zabbix-web-mysql -y
yum install zabbix-web-mysql -y
yum install zabbix-web-mysql -y
yum install zabbix-web-mysql -y
yum install zabbix-web-mysql -y
————————————————
3.創(chuàng)建數(shù)據(jù)庫
# systemctl start mariadb
# systemctl enable mariadb
# mysql -uroot -e "create database zabbix character set utf8 collate utf8_bin;"
# mysql -uroot -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';"
4.導(dǎo)入數(shù)據(jù)至數(shù)據(jù)庫中
zcat /usr/share/doc/zabbix-server-mysql-4.0.19/create.sql.gz | mysql -uroot -p123123 zabbix
5.配置zabbix-server指向數(shù)據(jù)庫
[root@zabbix-server ~]# grep '^D' /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
6.啟動 Zabbix server 進程
# systemctl enable zabbix-server
# systemctl start zabbix-server
7.配置Zabbix 前端 web頁面
vim /etc/httpd/conf.d/zabbix.conf
.....
php_value date.timezone Asia/Shanghai
....
systemctl restart httpd #重啟Httpd
8.通過url訪問zabbix-server
可通過ip地址訪問,例:10.0.0.7:10050
1.根據(jù)提示填寫信息即可
2.默認的用戶名和密碼是
username: Admin
password: zabbix
當zabbix初始界面出現(xiàn)錯誤
解決步驟:
vim /etc/php.ini
post_max_size8M16M
max_execution_time30300
max_input_time60300
date.timezone = Asia/Shanghai
systemctl restart httpd.service
9.登錄zabbix后
1.修改密碼
頁面右上角小人頭,進行修改
2.將zabbix修改為中文
10.如何快速的監(jiān)控一臺主機
1.需要安裝zabb-agent
2.agent版本有有要求?
平級
低于
3.安裝zabbix-agent (沒有依賴)
rpm -Uvh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.14-1.el7.x86_64.rpm
4.配置zabbix-agent,允許172.16.1.71 能夠采集172.16.1.7本地的數(shù)據(jù)
[root@web01 ~]# grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.1.71
Include=/etc/zabbix/zabbix_agentd.d/*.conf
5.啟動zabbix-agent
systemctl enable zabbix-agent
systemctl start zabbix-agent
systemctl restart zabbix-agent
6.登錄zabbix-server web界面
1.配置-->主機-->添加主機
2.模板-->關(guān)聯(lián)-->Template Linux OS
11.zabbix中文亂碼
rpm -ql zabbix-web | grep /usr/share/zabbix/assets/fonts
在主機\C\windows下的font中上傳
cd /usr/share/fonts/dejavu
mv DejaVuSans.ttf DejaVuSans_bak.ttf
mv msyh.ttf DejaVuSans.ttf
12.zabbixserver如何監(jiān)控自己本身?
rpm -Uvh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.14-1.el7.x86_64.rpm
systemctl start zabbix-agent
systemctl enable zabbix-agen
13.zabbix基礎(chǔ)架構(gòu)**
zabbix-agent
zabbix-server
mariadb
zabbix-web
14.zabbix架構(gòu)拆分
j將LAMP架構(gòu)拆分為LAP+MySQL (拆分數(shù)據(jù)庫到單臺主機 )
172.16.1.71 zabbix-server zabbix-web
172.16.1.51 數(shù)據(jù)庫
1.安裝數(shù)據(jù)庫
yum install mariadb-server -y
systemctl enable mariadb
systemctl start mariadb
2.創(chuàng)建zabbix庫,配置遠程授權(quán)用戶
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
3.在172.16.1.71上進行如下操作
[root@zabbix-server ~]# mysqldump -B zabbix >zabbix.sql
[root@zabbix-server ~]# cat zabbix.sql | mysql -h 172.16.1.51 -uzabbix -pzabbix zabbix
4.修改zabbix-server配置的指向
[root@zabbix-server ~]# cat /etc/zabbix/zabbix_server.conf
#DBHost=localhost
DBHost=172.16.1.51
[root@zabbix-server ~]# systemctl restart zabbix-server
5.修改zabbix-web配置的指向
[root@zabbix-server ~]# vim /etc/zabbix/web/zabbix.conf.php
$DB['SERVER'] = '172.16.1.51';
[root@zabbix-server ~]# systemctl restart httpd
自定義監(jiān)控項
15.如何快速監(jiān)控一個自定義對象,比如監(jiān)控當前用戶登錄數(shù)量
Format: UserParameter=<key>,<shell command>
1.使用shell命令提取當前用戶登錄的數(shù)量 who|wc -l
2.使用zabbix-agent將shell命令提取的結(jié)果封裝一個監(jiān)控項 UserParameter
3.zabbix-agent自己檢查該監(jiān)控項是否能正確提取到對應(yīng)的值 zabbix_agentd -p
4.zabbix-server通過zabbix-get檢查zabbix-agent端自定義的監(jiān)控項是否正常 zabbix_get -s 172.16.1.7 -k user_login
5.登錄zabbix-web頁面, 找到對應(yīng)的主機, 然后添加對應(yīng)的監(jiān)控項.
6.點擊檢測中--->最新數(shù)據(jù)--->選擇主機--->選擇應(yīng)用級-->檢查監(jiān)控項指標的變化
cat /etc/zabbix/zabbix_agentd.d/all.conf
UserParameter=user_login,who|wc -l
systemctl restart zabbix-agent
zabbix-get server端檢測agent端的取值
server端手動測試取值結(jié)果
server端安裝zabbix-get
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.14-1.el7.x86_64.rpm
zabbix_get -s 172.16.1.7 -k user_login
16.如何快速設(shè)定一個自定義閾值,比如超過4個人登錄則觸發(fā)報警
1.基于已創(chuàng)建好的監(jiān)控項設(shè)定閾值
2.如果達標則觸發(fā)
3.如果不達標,繼續(xù)探測,監(jiān)視
17.前端展示報警:
1.點擊右上角小人頭-->正在發(fā)送消息-->勾選前端信息中
監(jiān)控項职辅、觸發(fā)器、報警通知
1.詳細講解自定義監(jiān)控
1.認識Template OS Linux 模塊的所有監(jiān)控項都是干什么的
2.自定義一個監(jiān)控項 ( 創(chuàng)建監(jiān)控項中的所有選項 )
3.歷史保留如何計算? ( 數(shù)據(jù) )
days*(items/refresh rate)*24*3600*bytes
items:監(jiān)控項數(shù)量聂示。
days:保留歷史數(shù)據(jù)的天數(shù)域携。
refresh rate:監(jiān)控項的更新間隔。
bytes:保留單個值所需要占用的字節(jié)數(shù)鱼喉,依賴于數(shù)據(jù)庫引擎秀鞭,通常為 ~90 字節(jié)趋观。
90*(200/60)*24*3600 ~ 24MB * 200主機 = 5G
4.趨勢保留如何計算? ( 圖形 )
days*(items/3600)*24*3600*bytes
items:監(jiān)控項數(shù)量。
days:保留歷史數(shù)據(jù)的天數(shù)锋边。
bytes:保留單個趨勢數(shù)據(jù)所需要占用的字節(jié)數(shù)皱坛,依賴于數(shù)據(jù)庫引擎,通常為 ~90 字節(jié)豆巨。
365*(200/3600)*24*3600 ~ 2MB * 200主機 = 500MB
5.事件如何計算?
days*events*24*3600*bytes
events:每秒產(chǎn)生的事件數(shù)量剩辟。假設(shè)最糟糕的情況下,每秒產(chǎn)生 1 個事件往扔。
days:保留歷史數(shù)據(jù)的天數(shù)贩猎。
bytes:保留單個趨勢數(shù)據(jù)所需的字節(jié)數(shù),取決于數(shù)據(jù)庫引擎萍膛,通常為 ~170 字節(jié)吭服。
365*1*24*3600 ~ 30MB *200主機 = 6G
https://www.zabbix.com/documentation/4.0/zh/manual/installation/requirements
6.自定義監(jiān)控TCP 11種狀態(tài)?
netstat -an | grep -c ESTABLISHED
netstat -an | grep -c LISTEN
netstat -an | grep -c SYN_SENT
netstat -an | grep -c TIME_WAIT
1.使用shell命令提取狀態(tài)
2.通過zabbix-agent將提取的狀態(tài)封裝為一個又一個的監(jiān)控項目
3.檢查封裝后的監(jiān)控項是否取值正確
4.創(chuàng)建一個模板
5.基于模板創(chuàng)建監(jiān)控項
6.將主機關(guān)聯(lián)該模板,完成監(jiān)控
7.檢查監(jiān)控后的數(shù)據(jù)
UserParameter=tcp[*], netstat -lntp | grep -c "$1"
7.如何讓其他機器也能使用該模板?
1.推送*.conf文件,這樣其他主機也能提取到key對應(yīng)的值
2.將主機關(guān)聯(lián)對應(yīng)的模板
2.自定義觸發(fā)器
https://www.cnblogs.com/kingle-study/p/10172413.html
1.監(jiān)控內(nèi)存的百分比, 如果 低于20% 則觸發(fā)報警
1.通過shell命令提取內(nèi)存的百分比
2.設(shè)定觸發(fā)器
多條件觸發(fā)器
2.監(jiān)控內(nèi)存, 以及swap 當內(nèi)存低于百分之20,并且swap使用率超過百分之1% 則觸發(fā)報警
內(nèi)存取的是剩余 20
swap取的是已使用 1
變量
監(jiān)控項
key | 鍵值
and #并且 多個監(jiān)控項,同時成立
or #或者 多個監(jiān)控項,一個成立
last() #比對最新的值
avg() #平均值 網(wǎng)絡(luò)的流量 avg(5m) 進程 負載 IO
diff() #比對上一次文件的內(nèi)容
nodata() #收不到數(shù)據(jù)進行報警nodata(5m) 探測主機存活
test.nodata(5m) = 1 這個條件為真 獲取不到數(shù)據(jù)報警
(5m) #表示最近5分鐘得到值
(#5) #表示最近5次得到的值
3.自定義圖形
1.基于監(jiān)控項, 創(chuàng)建圖形, 可以在模板上創(chuàng)建,這個所有的主機都應(yīng)用成功
2.基于圖形創(chuàng)建, 聚合圖形, 將多個小圖片整合至一個大圖片上 ( 檢測中--->聚合圖形 )
3.基于聚合圖形創(chuàng)建幻燈片, 可以讓多張聚合圖形進行輪播 (大屏顯示器 --> )
擴展: 如果希望出更好看,更炫的圖,需要使用grafana
注意: grafana只是一個出圖,所有的數(shù)據(jù)都是zabbix提供 ( 皮膚 )
1.安裝grafana
# yum localinstall grafana-6.4.4-1.x86_64.rpm
2.啟動grafana 默認監(jiān)聽在3000端口
# systemctl start grafana-server
3.安裝插件, 集成zabbix
# grafana-cli plugins install alexanderzobnin-zabbix-app
# systemctl restart grafana-server
4.啟用已安裝好的zabbix插件,這樣就完成了集成
5.配置zabbix數(shù)據(jù)源
6.grafana 變量 ()
1.實現(xiàn)一個單條件觸發(fā)器
2.實現(xiàn)一個多條件觸發(fā)器
3.基于監(jiān)控項
1.圖形
2.聚合圖形
3.幻燈片
4.grafana安裝
3.自定義報警
基于監(jiān)控項-->觸發(fā)器-->執(zhí)行動作--> ( 通知 | 執(zhí)行命令
1.怎么發(fā)
2.發(fā)什么
3.發(fā)給誰
郵箱報警
1.修改報警媒介
smtp.qq.com
端口:465
HELo: qq.com
SMTP電郵: 發(fā)件人郵箱 *****qq.com
安全連接: SSL
打開驗證對端,驗證主機
認證:
用戶:發(fā)件人郵箱 *****qq.com
密碼:郵箱授權(quán)碼
2.收件人設(shè)置:
右上角小人頭蝗罗,報警媒介填寫接收人郵箱
1.啟用動作
2.動作中將所有的報警消息通過介質(zhì)發(fā)送給administrator用戶
3.配置介質(zhì)--> 新建一個發(fā)郵件的郵箱介質(zhì)
4.配置administrator用戶, 填寫收件人郵件
https://www.zabbix.com/documentation/3.4/zh/manual/appendix/macros/supported_by_location
修改報警的消息
報警主機:{HOST.NAME1}
報警服務(wù): {ITEM.NAME1}
報警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
報警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
嚴重級別: {TRIGGER.SEVERITY}
3.配置故障恢復(fù)消息艇棕,消息內(nèi)容如下:
恢復(fù)主機:{HOST.NAME1}
恢復(fù)服務(wù): {ITEM.NAME1}
恢復(fù)Key1:{ITEM.KEY1}:{ITEM.VALUE1}
恢復(fù)Key2: {ITEM.KEY2}:{ITEM.VALUE2}
{ALERT.SENDTO} #發(fā)送的用戶
{ALERT.SUBJECT} #發(fā)送的主題
{ALERT.MESSAGE} #發(fā)送的內(nèi)容
郵件報警
微信報警
安裝python-pip 模塊
yum install python-pip -y
pip install requests
cd /usr/lib/zabbix/alertscipts
rz weixin.py chown +x weixin.py
./weixin.py WeiXinID Subject Messages
切記一定要刪除,否則導(dǎo)致權(quán)限問題串塑。
rm -f /tmp/weixin.log
操作流程:單擊管理---> 報警媒介類型--> 創(chuàng)建媒介類型
企業(yè)微信地址沼琉,個人可注冊
https://work.weixin.qq.com/
登錄企業(yè)微信
- 企業(yè) -> 微工作臺里可以直接微信關(guān)注,無需要下載企業(yè)微信
- 通訊錄里的賬號在發(fā)微信腳本中要用到
- 應(yīng)用與小程序可創(chuàng)建應(yīng)用
發(fā)微信的python腳本/usr/local/zabbix/alertscripts/weixin.py
[root@zabbix-server alertscripts]# cat weixin.py
!/usr/bin/env python
-- coding: utf-8 --
author: bgx
date: 2018
comment: zabbix接入微信報警腳本
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S',
filename = os.path.join('/tmp','weixin.log'),
filemode = 'a')
corpid='xxx'
appsecret='xxx'
agentid=xxx
獲取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
發(fā)送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
"touser": touser,
"toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
測試腳本
/usr/local/zabbix/alertscripts/weixin.py 'abc' 'weixin_subject' 'weixin_message'
釘釘報警
釘釘企業(yè)的地址
https://oa.dingtalk.com/
釘釘企業(yè)告警的注意事項
1.通訊錄管理里的userid發(fā)釘釘需要用到
2.工作臺里可自建應(yīng)用
3.微應(yīng)用管理可以管理應(yīng)用
4.開發(fā)賬號管理可以查看密碼信息
發(fā)送釘釘告警的腳本/usr/local/zabbix/alertscripts/zabbix_dingding.py
!/usr/bin/python
-- coding: utf-8 --
curl 'https://oapi.dingtalk.com/gettoken?corpid=xxx&corpsecret=xxx'
import json,urllib2,sys
appkey = 'dingbb89fne7xgn86dri'
appsecret = 'c81LS_3h7pDRB6ul94tzXfyfcwmWaoy68yr-PGn7eG6MVE8RGXqADmw2DYQFsOsX'
agentid = '682880648'
touser = sys.argv[1]
content = sys.argv[2]
tockenurl = 'https://oapi.dingtalk.com/gettoken?corpid=' + appkey + "&corpsecret=" + appsecret
tockenresponse = urllib2.urlopen(tockenurl)
tockenresult = json.loads(tockenresponse.read().decode('utf-8'))
tocken = tockenresult['access_token']
sendurl = 'https://oapi.dingtalk.com/message/send?access_token=' + tocken
headers = {
'Content-Type':'application/json'
}
main_content = {
"touser": touser,
"toparty": "",
"agentid": agentid,
"msgtype": "text",
"text": {
"content": content
}
}
main_content = json.dumps(main_content)
req = urllib2.Request(sendurl,headers=headers)
response = urllib2.urlopen(req, main_content.encode('utf8'))
print(response.read().decode('utf-8'))
手動發(fā)釘釘告警測試
chmod +x /usr/local/zabbix/alertscripts/zabbix_dingding.py
/usr/local/zabbix/alertscripts/dingding.py manager8495 '監(jiān)控測試'
{ALERT.SENDTO} #發(fā)送的用戶
{ALERT.SUBJECT} #發(fā)送的主題
{ALERT.MESSAGE} #發(fā)送的內(nèi)容
4.告警升級 | 告警抑制
1.遠程執(zhí)行命令
2.告警抑制是怎么回事
1個故障 出現(xiàn) 發(fā)郵件給運維 郵件
超過1分鐘沒有被處理 發(fā)郵件給經(jīng)理 微信
超過2分鐘沒有被處理 發(fā)郵件給總監(jiān) 釘釘
7.自定義模板
8.自定義監(jiān)控Nginx PHP
自定義監(jiān)控項模板桩匪,及服務(wù)的狀態(tài)監(jiān)控
1.模板的重要
1.手動添加監(jiān)控比較麻煩打瘪,監(jiān)控項 -> 圖形 -> 觸發(fā)器。
問題:
1.例如: 100臺服務(wù)器需要檢查81端口
2.例如: 100臺服務(wù)器81改成82
解決:
使用模板可以解決以上問題, 只需要修改一下模板,然后所有的主機都生效
2.兩種模板
系統(tǒng)自帶模板
自定義模板
自定義模板的使用
1.創(chuàng)建模板吸祟,模板得屬于某個主機組(Templates)
2.在模板中創(chuàng)建監(jiān)控項目、觸發(fā)器桃移、創(chuàng)建圖形
3.新增監(jiān)控主機時添加對應(yīng)的模板
4.更改模板的監(jiān)控項屋匕,所以使用模板的主機都會自動變更
建議: 監(jiān)控的時候都使用模板, 因為模板添加啥的都方便,修改也比較方便
1.zabbix監(jiān)控windows
環(huán)境:
1.zabbix server的ip:10.0.0.71
2.被監(jiān)控windows的ip:10.0.0.1
1.下載Zabbix Agent
https://www.zabbix.com/downloads/4.0.14/zabbix_agents-4.0.14-win-amd64.zip
2.Windows安裝zabbix agent
編輯配置文件D:\zabbix_agents-4.0.14-win-amd64\conf\zabbix_agentd.conf
Server=10.0.0.71
3.運行cmd借杰,將zabbix命令注冊為服務(wù)(使用管理員) services.msc
"d:\zabbix_agents-4.0.14-win-amd64\bin\zabbix_agentd.exe" --config d:\zabbix_agents-4.0.14-win-amd64\conf\zabbix_agentd.conf --install
4.cmd運行
查看監(jiān)聽netstat -an|find "10050"
5.zabbix_get獲取windows信息
zabbix_get -s xxx -k system.uname
zabbix_get -s xxx -k vm.memory.size[free]
zabbix_get -s xxx -k vfs.fs.size[C:,pfree]
6.windows防火墻放開10050端口
1.防火墻關(guān)閉的可以跳過這步
2.高級設(shè)置->入站規(guī)則->新建規(guī)則->端口->10050->允許連接->所有
7.zabbix頁面上添加windows主機
1.直接應(yīng)用windows模板
2.驗證Windows監(jiān)控是否正常
編寫一個最簡單的bat腳本D:\zabbix_agents-4.0.14-win-amd64\echo.bat
@echo off
echo "100"
zabbix配置添加D:\zabbix_agents-4.0.14-win-amd64\conf\zabbix_agentd.conf
UserParameter=echo.test,D:\zabbix_agents-4.0.14-win-amd64\echo.bat
2.zabbix監(jiān)控Nginx
1.監(jiān)控Nginx什么內(nèi)容
監(jiān)控Nginx⑦中狀態(tài)
2.怎么監(jiān)控
1.開啟Nginx stub status 模塊
2.使用curl命令獲取stub_status的數(shù)據(jù)
3.將獲取數(shù)據(jù)的方法封裝為一個又一個的監(jiān)控項
3.實施監(jiān)控
1.開啟nginx stub_status狀態(tài)
2.編寫腳本,提取nginx status的指標
[root@web01 scripts]# cat nginx_status.sh
Nginx_status_file=/tmp/nginx_status.tmp
Nginx_status_name=status.oldxu.com
Nginx_status_path=/nginx_status
curl -sH host:${Nginx_status_name} http://127.0.0.1:80${Nginx_status_path} > ${Nginx_status_file}
case $1 in
active)
echo $[ $(awk 'NR==1 {print $NF}' ${Nginx_status_file}) -1 ]
;;
accepts)
echo $[ $(awk 'NR==3 {print $1}' ${Nginx_status_file}) - 1 ]
;;
handled)
echo $[ $(awk 'NR==3 {print $2}' ${Nginx_status_file}) - 1 ]
;;
requests)
echo $[ $(awk 'NR==3 {print $3}' ${Nginx_status_file}) - 1 ]
;;
reading)
awk 'NR==4 {print $2}' ${Nginx_status_file}
;;
writing)
awk 'NR==4 {print $4}' ${Nginx_status_file}
;;
waiting)
awk 'NR==4 {print $NF}' ${Nginx_status_file}
;;
*)
echo "USAGE: $0 [active|accepts|handled|requests|reading|writing|waiting]"
;;
esac
3.配置zabbix-agent, 添加自定義監(jiān)控項
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx_status[*], /bin/bash /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.sh "$1"
4.重啟zabbix-agent
5.zabbix-server使用zabbix-get獲取監(jiān)控項的值
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k nginx_status[active]
10
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k nginx_status[requests]
20
6.登錄zabbix-web
1.創(chuàng)建模板
2.創(chuàng)建監(jiān)控項
3.創(chuàng)建圖形
4.創(chuàng)建觸發(fā)器
5.關(guān)聯(lián)對應(yīng)主機
1.nginx的狀態(tài)監(jiān)控
2.nginx日志監(jiān)控 { 200 300 301 304 404 403 500 401 .... 這些狀態(tài)出現(xiàn)的次數(shù)}
1.提取日志
awk '{print $9}' /var/log/nginx/access.log|grep -c "302"
2.自定義監(jiān)控項,支持傳參
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx_status_code[*], awk '{print $9}' /var/log/nginx/access.log|grep -c "$1"
[root@web01 ~]# systemctl restart zabbix-agent
3.server使用zabbix-get獲取
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k nginx_status_code[200]
10000
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k nginx_status_code[302]
327556
4.登錄zabbix-web
1.創(chuàng)建模板
2.創(chuàng)建監(jiān)控項
3.創(chuàng)建圖形
4.創(chuàng)建觸發(fā)器
5.關(guān)聯(lián)對應(yīng)主機
================================================================================
監(jiān)控php
1.監(jiān)控php端口
2.監(jiān)控php進程 master worker
3.監(jiān)控php狀態(tài)
實施:
1.如何開啟php狀態(tài)
2.獲取php狀態(tài)中重要的指標
3.編寫腳本支持傳參
1.開啟php的狀態(tài)模塊
[root@web01 ~]# cat /etc/php-fpm.d/www.conf
....
pm.status_path = /fpm_status
....
2.配置nginx,將http請求轉(zhuǎn)發(fā)給php處理
[root@web01 conf.d]# cat status.oldxu.com.conf
server {
listen 80;
server_name status.oldxu.com;
location /fpm_status {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
3.php-fpm狀態(tài)指標含義
[root@web01 conf.d]# curl -H Host:status.oldxu.com http://127.0.0.1/fpm_status
pool: www
process manager: dynamic
start time: 20/Nov/2019:15:15:19 +0800
start since: 200
accepted conn: 22 #當前池接受的請求數(shù)
listen queue: 0 #請求隊列,如果這個值不為0,那么需要增加FPM的進程數(shù)量
max listen queue: 0 #請求隊列最高的數(shù)量
listen queue len: 128 #socket等待隊列長度
idle processes: 5 #空閑進程數(shù)量
active processes: 1 #活躍進程數(shù)量
total processes: 6 #總進程數(shù)量
max active processes: 1 #最大的活躍進程數(shù)量(FPM啟動開始計算)
max children reached: 0 #超過最大進程數(shù)的峰值的次數(shù),如果不為0,需要調(diào)整進程的最大活躍進程數(shù)量
4.編寫取值腳本
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/scripts/fpm_status.sh
#!/usr/bin/bash
fpm_status_file=/tmp/fpm_status.tmp
fpm_status_name=status.oldxu.com
fpm_status_path=/fpm_status
curl -sH host:${fpm_status_name} http://127.0.0.1:80${fpm_status_path} > ${fpm_status_file}
case $1 in
accepted_conn)
awk '/accepted conn:/{print $NF}' ${fpm_status_file}
;;
listen_queue)
awk '/^listen queue:/{print $NF}' ${fpm_status_file}
;;
max_listen_queue)
awk '/^max listen queue:/{print $NF}' ${fpm_status_file}
;;
active_processes)
awk '/^active processes:/{print $NF}' ${fpm_status_file}
;;
idle_processes)
awk '/^idle processes:/{print $NF}' ${fpm_status_file}
;;
total_processes)
awk '/^total processes:/{print $NF}' ${fpm_status_file}
;;
max_active_processes)
awk '/^max active processes:/{print $NF}' ${fpm_status_file}
;;
max_children_reached)
awk '/^max children reached:/{print $NF}' ${fpm_status_file}
;;
*)
echo "USAGE: $0 [accepted_conn|listen_queue|max_listen_queue|active_processes|idle_processes|total_processes|max_active_processes|max_children_reached]"
;;
esac
5.自定義監(jiān)控項,支持傳參
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.conf
UserParameter=fpm.status[*], /bin/bash /etc/zabbix/zabbix_agentd.d/scripts/fpm_status.sh "$1"
[root@web01 ~]# systemctl restart zabbix-agent
6.server使用zabbix-get獲取
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k fpm.status[accepted_conn]
2031
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k fpm.status[max_active_processes]
50
7.登錄zabbix-web
1.創(chuàng)建模板
2.創(chuàng)建監(jiān)控項
3.創(chuàng)建圖形
4.創(chuàng)建觸發(fā)器
5.關(guān)聯(lián)對應(yīng)主機
==============================================================================
Mysql的基礎(chǔ)監(jiān)控
1.進程存活
2.檢測端口
Mysql的高級監(jiān)控說明
Mysql提供show global status可以實現(xiàn)對Mysql的高級監(jiān)控
高級監(jiān)控包含監(jiān)控Mysql連接數(shù)过吻,增刪改查數(shù),流量等
其他的監(jiān)控mysql的方式
天兔 (文檔)
percona (視頻)
監(jiān)控命令詳解mysql -uroot -poldxu.com -e 'show global status'
Threads_connected:連接數(shù)
Com_select:查詢總量
Com_insert:插入總量
Com_update:更新總量
Com_delete:刪除總量
Bytes_received: 流入總流量
Bytes_sent:流出總流量
Slow_queries:慢查詢總量
1.編寫取值腳本check_mysql.sh
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh
!/usr/bin/bash
port=2
mysql -uroot -poldxu.com -P{key}\s" |awk '{print $2}'
2.測試監(jiān)控Shell腳本
[root@web01 ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh 3306 Threads_connected
3.Zabbix自定義監(jiān)控項
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql.conf
UserParameter=mysql.status[*], /bin/bash /etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh "2" 2>/dev/null
重啟agent
4測試能否獲取到值
zabbix_get -s xxx -k mysql.status[3306,Threads_connected]
zabbix_get -s xxx -k mysql.status[3306,Com_insert]
5.使用Template DB MySQL模板監(jiān)控Mysql 利用自帶的模板改一改
mysql.status[3306,Threads_connected]
mysql.status[3306,Com_select]
mysql.status[3306,Bytes_received]
mysql.status[3306,Bytes_sent]
寫一個測試的程序測一下
[root@web01 ~]# cat mysql.sh
for i in {1..1000}
do
mysql -uroot -poldxu.com -h 127.0.0.1 -e "create database IF NOT EXISTS db;
use db;
DROP TABLE IF EXISTS test{i}(id int);
insert into db.test{i};
delete from test${i} where id=123456;"
done
==============================================================================
Mysql主從監(jiān)控的必要性
1.如果發(fā)生主從同步異常蔗衡,業(yè)務(wù)會出問題
2.如果從庫是用來備份的纤虽,會導(dǎo)致數(shù)據(jù)丟失
Mysql主從同步監(jiān)控說明
1.從庫運行show slave status\G可以來查看主從同步信息
Slave IO Running 可以觀察從庫的IO進程是否正常,IO進程用于同步二進制日志
Slave SQL Running 可以觀察從庫的SQL進程是否正常绞惦,SQL進程用于執(zhí)行二進制日志
Seconds Behind Master代表主從同步的延時時間
1.監(jiān)控Mysql主從的Shell腳本mysql_slave_status.sh
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh
!/usr/bin/bash
port=2
mysql -uroot -poldxu.com -P{key}:"|awk '{print $2}' 2>/dev/null
2.Shell腳本測試
[root@web01 ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh 3306 Slave_SQL_Running
Yes
[root@web01 ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh 3306 Slave_IO_Running
Yes
[root@web01 ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh 3306 Seconds_Behind_Master
0
3.Zabbix自定義Key監(jiān)控Mysql主從
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql.conf
UserParameter=mysql.slave.status[*], /bin/bash /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh "2" 2>/dev/null
重啟Agent
4.創(chuàng)建監(jiān)控模板Template Mysql Slave Status
mysql.slave.status[3306,Slave_IO_Running]
mysql.slave.status[3306,Slave_SQL_Running]
mysql.slave.status[3306,Seconds_Behind_Master]
5.定義解決器來判斷主從同步是否異常
1.觸發(fā)器一: 兩個狀態(tài)都要為Yes
{Template MySQL Slave Status:mysql.slave.status[3306,Slave_IO_Running].str(Yes)}=0 or {Template MySQL Slave Status:mysql.slave.status[3306,Slave_SQL_Running].str(Yes)}=0
2.觸發(fā)器二: 延時不能超過100
{Template MySQL Slave Status:mysql.slave.status[3306,Seconds_Behind_Master].last()}>100
網(wǎng)絡(luò)發(fā)現(xiàn)逼纸、主動注冊
1.zabbix的snmp監(jiān)控? ( 不重要 )
2.web監(jiān)控
pv uv ip
請求延時
響應(yīng)延時
加載時間
網(wǎng)站慢則報警
4.自動化監(jiān)控:
自動發(fā)現(xiàn),網(wǎng)絡(luò)發(fā)現(xiàn)
主動注冊
主動模式與被動模式區(qū)別?
主動模式與被動模式效果展示?
https://blog.csdn.net/qq_28657577/article/details/82834442
snmp基礎(chǔ)介紹
snmp全稱是簡單網(wǎng)絡(luò)管理協(xié)議
為什么要用?
路由器交換機無法安裝agent程序,但是都提供snmp服務(wù)端, 我們可以使用zabbix的snmp方式監(jiān)控snmp服務(wù)端的數(shù)據(jù)
snmp基礎(chǔ)概念:
OID:
內(nèi)存的大小:.1.3.6.1.2.1.25.2.2.0
內(nèi)存的剩余:.1.3.6.1.2.1.25.2.2.1
任何一個指標在snmp中都有一個唯一的值進行表示济蝉,那么oid排列順序是以樹狀信息排列杰刽。
MIB庫:統(tǒng)計所有的old庫(國際標準)
獲取內(nèi)存信息菠发,hrMemorySize.0
可以理解MIB是域名,比較好記憶贺嫂。 OID是IP地址滓鸠,不太好記憶。
snmp版本:
v1:不支持加密第喳,任何人都可以取值, 不安全
v2:簡單加密版糜俗,通過口令才可以取值 通過 community設(shè)定口令
v3:復(fù)雜加密,采集效率比較低
目前使用的最多的還是v2版本
snmp服務(wù)端安裝
1.安裝
[root@web02 ~]# yum install net-snmp -y
2.配置
[root@web02 ~]# vim /etc/snmp/snmpd.conf
#public是默認密碼曲饱,建議修改
com2sec notConfigUser default oldxu
#限制叢樹杈哪個地方開始取值悠抹,如果需要監(jiān)控的信息,設(shè)置.1從頂點開始
view systemview included .1
3.啟動
[root@web02 ~]# systemctl enable snmpd.service
[root@web02 ~]# systemctl start snmpd
4.客戶端安裝命令測試取值
# yum install net-snmp-utils -y
# snmpwalk -v2c -c oldxu 172.16.1.7 .1.3.6.1.2.1.25.2.2.0 #OID方式
# snmpwalk -v2c -c oldxu 172.16.1.7 hrMemorySize.0 #MIB方式
5.在zabbix-web界面直接添加即可
總結(jié):
1.snmp介紹
OID
MIB
版本
2.snmp服務(wù)安裝配置啟動測試
1.zabbix基礎(chǔ)架構(gòu)
2.zabbix內(nèi)部資源
2.web監(jiān)控
pv uv ip
1.awk
2.騰訊分析 百度統(tǒng)計 google分析
3.piwiki ---> 改名matomo
4.自建流量分析平臺
1.進入騰訊移動分析平臺 html應(yīng)用 別人家
2.給一份js的代碼
3.將js的代碼加入網(wǎng)站
4.等待一天 就能查看到指標
2.自己家 開源matomo
php+mysql 方式開發(fā) LNMP環(huán)境 + matomo代碼 = 統(tǒng)計網(wǎng)站
1.準備好一個blog站點 + qq主題
2.安裝matomo程序
3.matomo添加我們的網(wǎng)站,會生成一個js的代碼
4.登錄blog 將js代碼添加進主題
5.用戶模擬訪問測試
6.登錄matomo查看pv 情況
注意: 在內(nèi)網(wǎng)使用,一定都需要做域名解析
在外網(wǎng)使用,無需考慮
請求延時
響應(yīng)延時
加載時間
網(wǎng)站慢則報警
實際案例: 監(jiān)控一個網(wǎng)站: zabibx網(wǎng)站速度
1.訪問zabbix
2.登錄zabbix regex:name="csrf-token" content="([0-9a-z]{16})"
3.檢查zabbix
4.退出zabbix
5.檢查是否退出zabbix成功
監(jiān)控寶 壓測寶
1.snmp監(jiān)控
2.騰訊移動分析公網(wǎng)--
3.matomo內(nèi)網(wǎng)分析
4.web檢測-->wordpress
4.自動化監(jiān)控:
自動發(fā)現(xiàn),網(wǎng)絡(luò)發(fā)現(xiàn)
主動注冊
主動模式與被動模式區(qū)別?
主動模式與被動模式效果展示?
1.自動發(fā)現(xiàn):
規(guī)則 + 動作 -->
添加主機
添加主機組
添加模板
2.自動發(fā)現(xiàn)弊端:
1.掃描慢
2.容易漏
3.對server壓力較大
4.無法根據(jù)主機名稱關(guān)聯(lián)對應(yīng)模板
1.主動注冊:
agent主動上報數(shù)據(jù),而不是server詢問
1.agent需要配置 ServerActive HostName 配置為主動模式
主動注冊2個場景:
1.根據(jù)主機名稱,關(guān)聯(lián)不同的模板?
web linux tcp nginx php mysql-slave
db linux tcp mysql
2.根據(jù)主機的元數(shù)據(jù),關(guān)聯(lián)不同的模板?
linux
windows
主動模式和被動模式的區(qū)別?
網(wǎng)絡(luò)發(fā)現(xiàn) ---> 被動模式
主動注冊 ---> 主動模式
主動還是被動說的都是Agent程序.
被動:
形象理解: 領(lǐng)導(dǎo)找你要數(shù)據(jù)
Server-->不斷輪詢Agent獲取數(shù)據(jù)
主動:
形象理解: 主動向領(lǐng)導(dǎo)匯報數(shù)據(jù)
Agent自動上報數(shù)據(jù)給Server
zabbix監(jiān)控項全部都是被動模式:
針對監(jiān)控項目被動模式: 獲取100個值 需要server輪詢獲取Agent100次
針對監(jiān)控項目主動模式: 獲取100個監(jiān)控項的值 Server--->發(fā)給Agent Agent一次上報所有數(shù)據(jù)
主動模式: 自動注冊 zabbix監(jiān)控客戶端(主動式)
被動模式: 網(wǎng)絡(luò)發(fā)現(xiàn) zabbix監(jiān)控客戶端(被動式)
主動模式與被動模式 選擇哪個?
1.如果主機超過300+以上,建議主動
2.如果zabbix隊列比較繁忙 建議主動模式
分布式監(jiān)控渔工、優(yōu)化
20.zabbix分布式監(jiān)控,模擬多機房實現(xiàn)監(jiān)控?
1.有多機房時,需要用到proxy
1.網(wǎng)絡(luò)不通
2.網(wǎng)絡(luò)延遲
2.當監(jiān)控的主機較多時,也可以用proxy來緩解壓力
1.安裝proxy
[root@web01 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
1.安裝proxy 數(shù)據(jù)庫
yum install zabbix-proxy-mysql mariadb-server -y
systemctl start mariadb
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix_proxy@localhost identified by 'zabbix_proxy';
zcat /usr/share/doc/zabbix-proxy-mysql-4.0.14/schema.sql.gz | mysql -uzabbix_proxy -pzabbix_proxy zabbix_proxy
2.配置zabbix-proxy
[root@web02 ~]# grep "^[a-Z]" /etc/zabbix/zabbix_proxy.conf
....
Server=10.0.0.71
Hostname=sh_proxy
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=zabbix_proxy
....
3.啟動proxy
systemctl enable zabbix-proxy.service
systemctl start zabbix-proxy
4.配置zabbix-agent 不通區(qū)域的agent指向不同的proxy
10.0.0.71 <--- 10.0.0.7 <---172.16.1.51
10.0.0.71 <--- 10.0.0.8 <---172.16.1.41
5.登錄zabbix-web
1.管理-->agent代理程序
注意: zabbix-server 與 zabbix-proxy 需要版本一致
ProxyLocalBuffer Proxy將在本地保留數(shù)據(jù)N小時锌钮,即使數(shù)據(jù)已與server同步。(默認不保留立即發(fā)送)
ProxyOfflineBuffer 如果無法連接Zabbix server引矩,proxy將默認保留數(shù)據(jù)1小時.
zabbix監(jiān)控jvm? tomcat
zabbix ---> jmx ---> java(zabbix-agent)
1.Zabbix-Server找Zabbix-Java-Gateway獲取Java數(shù)據(jù)
2.Zabbix-Java-Gateway找Java程序獲取數(shù)據(jù)
3.Java程序返回數(shù)據(jù)給Zabbix-Java-Gateway
4.Zabbix-Java-Gateway返回數(shù)據(jù)給Zabbix-Server
5.Zabbix-Server進行數(shù)據(jù)展示
配置JMX監(jiān)控的步驟:
1.安裝Zabbix-Java-Gateway梁丘。
2.配置zabbix_java_gateway.conf參數(shù)。
3.配置zabbix-server.conf參數(shù)旺韭。-->連接java-gateway
4.Tomcat應(yīng)用開啟JMX協(xié)議氛谜。
5.ZabbixWeb配置JMX監(jiān)控的Java應(yīng)用。
環(huán)境:
zabbix-server 10.0.0.71 172.16.1.71
zabbix-gateway 172.16.1.7
tomcat 172.16.1.8
1.安裝Zabbix-Java-Gateway
[root@web01 ~]# yum install zabbix-java-gateway -y
2.啟動Zabbix-Java-Gateway
[root@web01 ~]# systemctl restart zabbix-java-gateway
[root@web01 ~]# systemctl enable zabbix-java-gateway.service
3.配置zabbix-server指向zabbix-java-gateway
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
JavaGateway=172.16.1.7
JavaGatewayPort=10052
StartJavaPollers=5
[root@zabbix-server ~]# systemctl restart zabbix-server
4.啟動tomcat程序,開啟jmx協(xié)議
[root@web02 soft]# vim /soft/tomcat/bin/catalina.sh #頭部添加即可
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=172.16.1.8"
5.登錄zabbix-web添加一臺jmx的主機
zabbix Api ( 開發(fā) )
1.在使用zabbix-api之前区端,先獲取一個token
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "123456"
},
"id": 1
}' http://zabbix.oldxu.com/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"6b322c293dc557631c8ffdb32b1c6b5f","id":1}
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "6b322c293dc557631c8ffdb32b1c6b5f"
}' http://zabbix.oldxu.com/zabbix/api_jsonrpc.php
2.使用token驗證身份, 并禁用某一臺主機
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.update",
"params": {
"hostid": "10277",
"status": 1
},
"auth": "6b322c293dc557631c8ffdb32b1c6b5f",
"id": 1
}' http://zabbix.oldxu.com/zabbix/api_jsonrpc.php
4.使用API創(chuàng)建主機
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "10.0.0.1",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "10.0.0.1",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "20"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "4c831e081ff77510f9662bb9de0f9144",
"id": 1
}' http://zabbix.oldxu.com/zabbix/api_jsonrpc.php
Zabbix屬于寫多讀少的業(yè)務(wù), 所以需要針對zabbix的MySQL進行拆分.
1.LAMP -->拆分成LAP + MySQL
2.MySQL盡量使用SSD固態(tài)盤 (靜態(tài)盤會有尋道的過程值漫,浪費時間)將Zabbix-Agent被動監(jiān)控模式, 調(diào)整為主動監(jiān)控模式.
使用zabbix-proxy分布式監(jiān)控, 在大規(guī)模監(jiān)控時用于緩解Zabbix-Server壓力
用proxy代理服務(wù)器可以緩解server的壓力去掉無用監(jiān)控項, 增加監(jiān)控項的取值間隔, 減少歷史數(shù)據(jù)保存周期(由housekeeper進程定時清理)
一些自帶監(jiān)控項很多我們用不到,可把無用監(jiān)控項取消织盼。
5)針對于Zabbix-server進程調(diào)優(yōu), 誰忙就加大誰的進程數(shù)量, 具體取決實際情況, 不是越大越好
StartPollersUnreachable=1
調(diào)整工作進程數(shù)杨何。
6)針對于Zabbix-server緩存調(diào)優(yōu), 誰使用的緩存多,就加大它的緩存值(zabbix cache usage圖表)
調(diào)整zabbix-server.conf的主配置文件,CacheSize相關(guān)大小沥邻。
- 關(guān)注管理->隊列, 是否有被延遲執(zhí)行的監(jiān)控項
zabbix單機監(jiān)控兩千臺機器是瓶頸危虱,分布式同樣最多2000臺。
Btree算法結(jié)構(gòu)的構(gòu)件過程
首先是把數(shù)據(jù)從小到大進行排序唐全,然后將數(shù)據(jù)有順序的存儲到數(shù)據(jù)頁上埃跷,生成left-node 葉子節(jié)點
通過葉子節(jié)點的范圍(最小值到下個葉子節(jié)點的最小值)和每個葉子節(jié)點的指針生成枝節(jié)點
最后通過枝節(jié)點的范圍(最小值到下分枝節(jié)點的最小值)和枝節(jié)點的每個指針生成root根節(jié)點
還有我們用的是數(shù)據(jù)庫5.7版本,它對索引的查詢范圍作了優(yōu)化邮利,怎么優(yōu)化的呢就是對葉子節(jié)點和枝節(jié)點加入了雙向指針
加入雙向指針的作用是減少了索引IO的次數(shù)
減少了隨機IO的數(shù)量
減少了IO的量級
鎖的隔離級別
臟讀 讀未提交的 比如A發(fā)生數(shù)據(jù)變化弥雹,但是沒有提交,B事務(wù)來了讀A修改的這些數(shù)據(jù)延届,就是臟讀
RU: 讀未提交
RC: 讀已提交
RR: 可重復(fù)讀
SR: 串行化
主從復(fù)制
兩臺以上的數(shù)據(jù)庫實例剪勿,通過二進制日志,實現(xiàn)數(shù)據(jù)復(fù)制的關(guān)系方庭。
實現(xiàn)過程:
1.兩臺以上數(shù)據(jù)庫實例窗宦,設(shè)置不同的server_id 赦颇,server_uuid
2.主庫開啟二進制日志,binlog
3.用mysqldump備份主庫的數(shù)據(jù),并且記錄位置點赴涵,媒怯。把數(shù)據(jù)恢復(fù)到從庫。
4.從庫通知主庫髓窜,告訴從庫主庫相關(guān)的信息扇苞。
5.從庫開啟slave復(fù)制線程
原理:
包括三個線程,4個文件 主:binlogdump mysql_bin
從: SQL寄纵、IO relay_info master_info relay_log
從庫執(zhí)行change master to ,獲取連接主庫的信息(IP鳖敷、port、用戶程拭、密碼定踱、binlog起點)
信息被存到master.info文件中。
- 從庫:start slave 命令, 啟動IO,SQL線程.
- IO開始工作,拿著,master.info中的連接信息,連接主庫,驗證通過,主庫開啟dump線程
- IO按照master.info中記錄的binlog位置點信息,向主庫的DUMP線程請求新的日志
- 主庫dump線程返回新的日志event,返回給從庫.
- 從庫IO線程接收binlog,并重新更新master.info信息
- 從庫IO將接收到的binlog記錄到relay-log中
- 從庫SQL線程讀取 relay.info信息,獲取到上次執(zhí)行到的位置點,繼續(xù)向后回放最新relaylog日志,并重新更新relay.info信息