防偽碼:真理不需色彩,美麗不需涂飾
一、監(jiān)控概述:
·初級:
·1.識別監(jiān)控對象 (分級)
·2.理解監(jiān)控對象 (理論基礎(chǔ))
·3.細分監(jiān)控對象的指標
·4.確定告警的基準線
·預(yù)中級:
1. 工具化和監(jiān)控分離
2. 監(jiān)控對象的分類:
2.1 硬件監(jiān)控 (方法:機房巡檢、IPMI、SNMP簡單網(wǎng)絡(luò)管理協(xié)議、)
2.2 系統(tǒng)監(jiān)控 (對象:cpu、內(nèi)存、IO【磁盤、網(wǎng)絡(luò)】)
2.3 服務(wù)監(jiān)控 (對象:分類服務(wù))
2.4 日志監(jiān)控 (方法:Elastic Stack)
2.5 網(wǎng)絡(luò)監(jiān)控 (方法: 第三方、Smokeping)
2.6 APM應(yīng)用性能管理 (工具:pinpoint APM)
2.7 流量監(jiān)控 (工具:Piwik、xx統(tǒng)計、xx分析)
2.8 其他監(jiān)控 (APP監(jiān)控、安全監(jiān)控、業(yè)務(wù)監(jiān)控、輿論監(jiān)控、xx監(jiān)控等)
3. 掌握一個監(jiān)控工具。例如:zabbix
·中級:
0.標準化監(jiān)控(標準化的腳本、模板、....)
1. 分布式監(jiān)控 (主動、被動、分布式)
2. 自動化監(jiān)控 (自動發(fā)現(xiàn)、主動注冊【Agent主動注冊、Server主動添加(API)】)
3. 性能優(yōu)化 (數(shù)據(jù)采集、數(shù)據(jù)存儲、數(shù)據(jù)查詢)
4. 二次開發(fā) (定制報表、API調(diào)用、)
·進階:(精通到放棄)
1. 告警閾值動態(tài)化
2. 智能告警:【1.告警去重 2.依賴】
3. 故障自愈 (事件驅(qū)動、主動控制)
4. 大規(guī)模告警
硬件監(jiān)控:
1. 機房巡檢
2. 通過網(wǎng)絡(luò)來巡檢
例如:DELL 通過iDRAC口監(jiān)控
HP 通過ILO
IBM 通過IMM
由于每個廠商不一樣可以通過IPMI協(xié)議來統(tǒng)一管理。
IPMI簡介:
Ipmitool是一種可用在linux系統(tǒng)下的命令行方式的ipmi平臺管理工具,它支持ipmi 1.5規(guī)范(最新的規(guī)范為ipmi2.0),通過它可以實現(xiàn)獲取傳感器的信息、顯示系統(tǒng)日志內(nèi)容、網(wǎng)絡(luò)遠程開關(guān)機等功能。
Ipmitool有兩種使用方式:
安裝IPMI
Zabbix自帶IPMI
1 2 | yum install OpenIPMI ipmitool systemctl start ipmi |
安裝ipmitool管理工具:
詳細安裝配置請參考網(wǎng)站:
https://www.ibm.com/developerworks/cn/linux/l-ipmi/index.html
建議通過以上IPMI網(wǎng)址安裝配置。
通過SNMP來管理:
基于SNMP監(jiān)控
安裝略
使用方法
查看cpu負載
1 2 3 4 5 6 | snmpget -v2c -c admin 192.168.56.11 .1.3.6.1.4.1.2021.10.1.3.1 UCD-SNMP-MIB::laLoad.1 = STRING: 0.00 snmpwalk -v2c -c admin 192.168.56.11 .1.3.6.1.4.1.2021.10.1.3 UCD-SNMP-MIB::laLoad.1 = STRING: 0.00 UCD-SNMP-MIB::laLoad.2 = STRING: 0.01 UCD-SNMP-MIB::laLoad.3 = STRING: 0.05 |
監(jiān)控寶 SNMP安裝:(環(huán)境CentOS 7 )
1. CentOS SNMP安裝:
安裝net-snmp
1 | yum install net-snmp net-snmp-devel net-snmp-utils |
說明:net-snmp-devel是為了使用net-snmp-config, net-snmp-utils是為了使用snmpwalk。
配置 Net-SNMP
CentOS下的net-snmp無法在selinux環(huán)境下正常使用v3。 如果您想使用snmp v3,請先禁用selinux。
net-snmp-config --create-snmpv3-user -ro -A snmp@jiankongbao -a MD5 jiankongbao
以上命令,創(chuàng)建一個snmpv3用戶,只讀,使用MD5,用戶名為jiankongbao,密碼為snmp@jiankongbao。
注意:運行之前請先停用net-snmp服務(wù)。
停止snmpd服務(wù)
1 | service snmpd stop |
運行Net-SNMP
運行 Net-SNMP 服務(wù)的方法比較簡單,不過Net-SNMP服務(wù)的名字是snmpd
1 | service snmpd start |
加入開機自啟動運行服務(wù)列表:
1 | chkconfig snmpd on |
檢測 Net-SNMP
可以使用 snmpwalk 來檢測snmp服務(wù)是否正常開啟。
1 | snmpwalk - v 3 -u jiankongbao -a MD5 -A "snmp@jiankongbao" -l authNoPriv 127.0.0.1 sysDescr |
如果一切正常,就會返回正常結(jié)果。
配置 防火墻
Net-SNMP 使用 udp 協(xié)議,161端口。
可以實現(xiàn)對mysql監(jiān)控、Apache監(jiān)控、Lighttpd監(jiān)控、Nginx監(jiān)控等等。
例如:
mysql監(jiān)控:
先創(chuàng)建mysql的權(quán)限,需要在被監(jiān)控的mysql服務(wù)器上為監(jiān)控寶創(chuàng)建一個專用的mysql用戶,這樣做的好處是:
與您的其它MySQL用戶進行有效隔離,獨立管理。
對該用戶進行受限管理,不需要給予任何MySQL權(quán)限。
指定監(jiān)控寶的訪問IP地址,阻止其它非法訪問。
操作非常簡單,在MySQL中操作如下:
1 2 3 | CREATE USER 'jiankongbao' @ '60.195.252.106' IDENTIFIED BY 'your_password' ; CREATE USER 'jiankongbao' @ '60.195.252.108' IDENTIFIED BY 'your_password' ; # CREATE USER 'jiankongbao'@'60.195.249.83' IDENTIFIED BY 'your_password'; |
注意:防火墻安全。在MySQL或者防火墻中指定授權(quán)IP地址的時候,請只開放我們指定的IP地址,而不要直接開放整個C類網(wǎng)段,比如60.195.252.0/24,因為該網(wǎng)段中其它服務(wù)器不在我們的可控范圍內(nèi)。
Apache 監(jiān)控:
需要開啟status模塊,修改httpd.conf文件。
添加如下:
1 2 3 4 5 6 7 8 | ExtendedStatus On <Location /server-status > SetHandler server-status Order deny,allow Deny from all Allow from 60.195.252.106 60.195.252.108 # Allow from 60.195.249.83 < /Location > |
也可以設(shè)置受限訪問設(shè)置:在配置文件中,修改<location /server-status>一行。
Lighttpd 監(jiān)控
Lighttpd的狀態(tài)監(jiān)控依賴于mod_status模塊,幸運的是,Lighttpd缺省已經(jīng)內(nèi)置了mod_status模塊,我們要做的就是打開配置文件lighttpd.conf,開啟這個模塊,也就是刪除模塊前邊的“#”注釋符,比如:
1 2 3 4 5 6 7 8 9 10 | server.modules = ( # "mod_rewrite", # "mod_redirect", # "mod_alias", "mod_access" , # "mod_trigger_b4_dl", # "mod_auth", "mod_status" , "mod_fastcgi" , "mod_accesslog" ) |
然后,在lighttpd.conf中找到以下部分:
1 2 | #### status module status.status-url = "/server-status" |
默認情況下以上語句是被注釋的,同樣,刪掉注釋符,保存配置文件,重啟lighttpd。
Nginx監(jiān)控:
默認情況下不包含狀態(tài)stub_status,所以編譯時添加參數(shù),然后再nginx.conf中開啟狀態(tài)頁面。
Windows SNMP安裝:
http://blog.jiankongbao.com/?p=185
詳細請參考
http://wiki.jiankongbao.com/doku.php/%E6%96%87%E6%A1%A3:%E5%AE%89%E5%85%A8%E6%8C%87%E5%BC%95
系統(tǒng)監(jiān)控:
CPU:
進程:每一個進程,至少有一個線程。
每個進程可以有多個線程。
(單CPU單核),進程的內(nèi)存空間是共享的,每個線程可以使用這些共享。提供協(xié)調(diào) 機制,防止進程之間和線程之間產(chǎn)生沖突,另一方面允許進程之間和線程之間共享資源。
在linux系統(tǒng)中用top命令查看到用戶態(tài)和內(nèi)核態(tài),為什么會有用戶態(tài)和內(nèi)核態(tài)?
0為內(nèi)核態(tài)
3為用戶態(tài)
CPU監(jiān)控指標:中斷/使用率/cpu負載/上下文切換/僵死進程的監(jiān)控、最大進程的運行 數(shù)量、
Top uptime vmstat mpstat lscpu
CPU負載:單位時間內(nèi)運行隊列中就緒等待的進程數(shù)平均值。
內(nèi)存:
虛擬內(nèi)存(linux管理的是虛擬內(nèi)存)、swap、物理內(nèi)存,linux管理虛擬內(nèi)存
內(nèi)存是分頁的,內(nèi)存頁默認每頁是4K
Free –m查看內(nèi)存時,剩余內(nèi)存需要查看available列
1 2 3 | total used free shared buff /cache available Mem: 977 102 514 6 360 714 Swap: 2047 0 2047 |
優(yōu)化內(nèi)存
1 2 | echo "0" > /proc/sys/vm/swappiness cat /sys/block/sda/queue/scheduler |
IO:
Iftop -n 不解析域名 -i 指定網(wǎng)卡名 –P 顯示端口名
1 2 | iftop -i eth0 -F 192.168.56.0 /24 |
Nethogs
Iotop
負載均衡器一定要監(jiān)控tcp狀態(tài)
以下是鏈接以及工具
1 2 3 4 5 6 7 8 | http: //www .ruanyifeng.com /blog/2013/04/processes_and_threads .html http: //os .51cto.com /art/201012/240476 .htm http: //www .cnblogs.com /cutepig/p/3403711 .html http: //elf8848 .iteye.com /blog/2089055 yum -y install nethogs yum –y install iotop yum –y install iftop yum –y install sysstat |
網(wǎng)絡(luò)監(jiān)控:
檢測工具:
http://ping.chinaz.com/
開源工具:SmokePing 支持分布式
zabbix部署
1. 什么是zabbix
Zabbix是一個分布式開源的監(jiān)控系統(tǒng),支持多種采集方法,使它幾乎可以采集和處理所有類型的監(jiān)控數(shù)據(jù);靈活的報警機制,可以實現(xiàn)各種的自定義報警策略,強大的拓展性,可以自定義監(jiān)控項、圖形、模板,還支持自動注冊和自動發(fā)現(xiàn),使它可以快速構(gòu)建一套大型的監(jiān)控系統(tǒng),還有豐富的API接口。
其他監(jiān)控系統(tǒng)cacti、nagios、MangeEngine_ApplicationsManager,lepus,smokeping,piwiki等選zabbix的理由:簡單、高效、靈活
安裝zabbix前需準備環(huán)境:
時間同步:
1 | yum -y install ntpdate |
設(shè)置計劃任務(wù):crontab -e
1 | echo '* * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >> /var/spool/cron/root |
查看計劃任務(wù):
crontab -l
1. 設(shè)置主機名解析
1 2 3 4 | cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.152.142 zabbix-server |
2.安裝 EPEL 倉庫和常用命令
1 2 3 | rpm -ivh http: //mirrors .aliyun.com /epel/epel-release-latest-7 .noarch.rpm yum install -y net-tools vim lrzsz tree screen lsof tcpdump |
注意:如果epel源不能使用,請自行切換其他yum源,本次安裝zabbix-server不需要網(wǎng)絡(luò),但是,由于選擇的是基礎(chǔ)環(huán)境安裝,需要安裝的工具包。
5.更新系統(tǒng)并重啟
1 | yum update -y && reboot |
安裝部署zabbix 3.0 LTS
Zabbix 3.0的安裝
軟件版本要求:
http 1.3.12
Php 5.4.0(不支持php7.0)
Mysql 5.0.3
Zabbix 3.0版本不支持php v7版本。入選用php v7 選擇使用zabbix 3.2
安裝YUM源。
1 | [root@localhost Desktop] # rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm |
在/etc/yum.repo下形成一個zabbix.repo文件
1 2 3 4 5 6 7 8 9 10 11 12 | [root@localhost ~] # ll /etc/yum.repos.d/ total 40 -rw-r--r--. 1 root root 1664 Nov 30 02:12 CentOS-Base.repo -rw-r--r--. 1 root root 1309 Nov 30 02:12 CentOS-CR.repo -rw-r--r--. 1 root root 649 Nov 30 02:12 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 314 Nov 30 02:12 CentOS-fasttrack.repo -rw-r--r--. 1 root root 630 Nov 30 02:12 CentOS-Media.repo -rw-r--r--. 1 root root 1331 Nov 30 02:12 CentOS-Sources.repo -rw-r--r--. 1 root root 2893 Nov 30 02:12 CentOS-Vault.repo -rw-r--r--. 1 root root 957 Dec 28 01:37 epel.repo -rw-r--r--. 1 root root 1056 Dec 28 01:37 epel-testing.repo -rw-r--r--. 1 root root 401 Feb 15 2016 zabbix.repo |
打開zabbix.repo文件yum源是指向國外的官網(wǎng)的,為了訪問方便,建議把yum源地址改為阿里云的源
修改yum源指向阿里源:
1 2 | baseurl=http: //mirrors .aliyun.com /zabbix/zabbix/3 .0 /rhel/7/ $basearch/ baseurl=http: //mirrors .aliyun.com /zabbix/non-supported/rhel/7/ $basearch/ |
查看zabbix安裝包:
yum list | grep zabbix
安裝zabbix包
1 | yum -y install zabbix-server-mysql zabbix-web-mysql |
安裝數(shù)據(jù)庫:
1 | yum -y install mariadb mariadb-server |
啟動mariadb服務(wù)并設(shè)置開機自啟動。
1 2 | systemctl enable mariadb.service systemctl start mariadb.service |
要想使用補全命令可以安裝epel源的包。
1 | yum install bash -comp* -y |
初始化數(shù)據(jù)庫:
1 | mysql_secure_installation |
設(shè)置數(shù)據(jù)庫密碼:
1 | mysqladmin -u root password |
進入數(shù)據(jù)庫:
1 | mysql -uroot -p |
創(chuàng)建數(shù)據(jù)庫,并設(shè)置字符集為Utf-8
1 | create database zabbix character set utf8 collate utf8_bin; |
授權(quán)數(shù)據(jù)庫:
1 | grant all privileges on zabbix.* to zabbix@ 'localhost' identified by '123.Com' ; |
打開導(dǎo)入數(shù)據(jù)庫并驗證zabbix數(shù)據(jù)庫:
1 | zcat /usr/share/doc/zabbix-server-mysql-3 .0.8 /create .sql.gz|mysql -uzabbix -p123.Com zabbix |
注意:zcat是一個查看命令。
設(shè)置web界面:
1 | vim /etc/httpd/conf/httpd .conf |
更改ServerName
啟動web服務(wù):
1 2 | systemctl restart httpd.service systemctl enable httpd.service |
配置zabbix-server,設(shè)置配置文件中添加密碼:
vim /etc/zabbix/zabbix_server.conf
啟動zabbix-server服務(wù):
systemctl start zabbix-server.service
注意:
Zabbix端口號10051
Zabbix的web配置文件默認安裝再/etc/httpd/conf.d/
連接php的配置文件默認安裝再/etc/httpd/conf.d/
關(guān)閉NetworkManager和防火墻:
1 2 | systemctl disable firewalld systemctl disable NetworkManager |
4. 關(guān)閉并確認 SELinux 處于關(guān)閉狀態(tài)
1 2 3 | vim /etc/sysconfig/selinuxSELINUX =disabled #修改為 disable setenforce 0 getenforce |
注意:不注意防火墻或者NetworkManager和selinux會導(dǎo)致zabbix啟動了卻web界面里還是顯示zabbix 未啟動。
進入web界面安裝zabbix
輸入http://zabbix服務(wù)器地址/zabbix/setup.php進入,根據(jù)向?qū)О惭b。更改時區(qū)
修改/etc/httpd/conf.d/zabbix.conf中的一行:
php_value date.timezone Asia/Shanghai把這一行的注釋去掉地點改為上海。
Asia/Shanghai
更改完畢后,重啟httpd.service服務(wù)。
這是安裝zabbix的向?qū)О惭b的第一步:
這是安裝zabbix的向?qū)О惭b的第二步
可以看到時間地點已經(jīng)更改成功了!
下一步設(shè)置連接數(shù)據(jù)庫的用戶密碼等:
下一步設(shè)置命名:
下一步:
安裝zabbix:
輸入用戶密碼,進入zabbix界面。
默認的用戶:Admin 密碼:zabbix
進入了zabbix的界面:
由于只安裝了zabbix,并沒有配置zabbix配置
修改zabbix配置文件:
1 | vim /etc/zabbix/zabbix_server .conf |
修改配置文件中的DBPassword=這一行并把注釋去掉!
重啟zabbix-server服務(wù)并設(shè)置開機自啟動
下面再看一下zabbix界面NO變成了YES.
顯示zabbix已經(jīng)正常啟動!
如果zabbix到達瓶頸可以進行拆分。
/etc/zabbix/web/zabbix.conf.ph在這個文件中配置拆分。
要想讓zabbix監(jiān)控自己,需要安裝一個zabbix-agent 可以監(jiān)控自己本身。依賴openssl
修改zabbix-agent配置文件
1 | vim /etc/zabbix/zabbix_agentd .conf |
可以配置主動和被動
啟動zabbix-agent服務(wù):
systemctl start zabbix-agent
可以看到如下zabbix server主機hosts
點擊紅色位置啟用zabbix server
看到已啟動!
Zabbix主動模式和被動模式:
理論:
被動模式流程,被動模式一定要記得設(shè)置Server = ServerIP
被動模式工作流程:
Server 打開一個TCP連接
Server發(fā)送一個key 為agent.ping
Agent接受這個請求,然后響應(yīng)< HEADER >< DATALEN >
Server對接受到的數(shù)據(jù)進行處理
TCP連接關(guān)閉
主動模式流程:主動模式一定要記得設(shè)置ServerActive=ServerIP
Agent向Server建立一個TCP連接
Agent請求需要檢測的數(shù)據(jù)列表
Server響應(yīng)Agent,發(fā)送一個Items列表
Agent允許響應(yīng)
TCP連接完成本次會話關(guān)閉
Agent開始周期性地收集數(shù)據(jù)
安裝第二臺agent:
安裝agent服務(wù):
1 | rpm -ivh zabbix-agent-3.0.5-1.el7.x86_64.rpm |
啟動并設(shè)置開機自啟
systemctl start zabbix-agent.service
systemctl enable zabbix-agent.service
Zabbix添加監(jiān)控主機:
在configuration中選擇hosts:
如果Groups沒有可以NEW一個,然后ip地址填寫agent的ip,添加完畢后不要add,
還需要添加Templates模板之后再按add(在這里選擇Template OS Linux模板)
截圖如下:
可以看見host主機添加成功:
發(fā)現(xiàn)添加的主機ZBX為紅色,報錯如下:
Received empty response from Zabbix Agent at [192.168.0.106]. Assuming that agent dropped connection because of access permissions.
解決辦法:修改agent的配置文件:
1 | vim /etc/zabbix/zabbix_agentd .conf |
修改為Server=(zabbix server的ip地址)
Server=192.168.152.142
重啟zabbix-agent服務(wù):
1 | systemctl restart zabbix-agent.service |
可以看到如下圖紅色變?yōu)榱司G色,問題解決了!
使用zabbix-get:
安裝zabbix-get服務(wù):
1 | yum install -y zabbix-get |
測試方法:
例如:
1 | zabbix_get -s linux-node2.example.com -k agent. ping |
只能取zabbix agent類型
查看本機有多少內(nèi)置key
1 | zabbix_agentd -p |
zabbix網(wǎng)址:
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: