系統運維監控


一 .主流運維監控工具:
Prometheus(https://prometheus.io/docs/introduction/overview/)、
Zabbix(https://www.zabbix.com/)
Nagios(https://www.nagios.org/)
Cacti(https://www.cacti.net/)
Open-falcon(http://open-falcon.org/)
Gangia(http://ganglia.info/)
Graylog(https://www.graylog.org/)
Zenoss Core(https://www.zenoss.com/)
Graphite(https://graphiteapp.org/)
Graylog(https://www.graylog.org/)
在生產環境里用到最多的三種分別是Prometheus、Zabbix、Nagios,下面分別列出這三種監控神器的優缺點:
Prometheus
簡介:
是一套開源的監控系統,將所有信息存儲為時間序列數據,因此實現一種Profiling(資料收集)監控方式,實時分析系統運行的狀態,執行時間,調用次數等,以找到系統的熱點,為性能優化提供依據,其本身的功能在於數據的提取,不具備監控功能,但是依靠它周邊組件實現了強大的監控功能。
優點:
易管理性,核心部分只有一個單獨的二進制文件,可直接在本地工作,不依賴於分布式存儲;
業務數據相關性,監控服務的運行狀態,從而讓用戶獲取服務和應用內部真正的運行狀態;
高效易伸縮,單一Prometheus可以處理數以百萬的監控指標;每秒處理十萬的數據點;提供多種語言的客戶端SDK(SDK接入協議);
良好的可視化,自帶有Prometheus UI,還提供了一個獨立的基於Rudy   on Rails的Dashboard解決方案Promdash。
缺點:
對於Prometheus的使用者來說,所有的公制端點都必須是可達的,這意味着一個更加復雜的安全網絡配置;
在大型的部署中,擴展性可能達不到預期的效果,所以建議收集短期的工作指標;
因為其主要設計目標之一是 操作簡單性,所以限制了監控系統可能失效模式數量,遵循着單一原則,Prometheus只局限於單個節點,因為集群帶來了額外的操作復雜性,使用單個節點不那么復雜,但是對可以由Prometheus監控的度量指標有着嚴格的限制。
Zabbix
簡介:
是一個基於web界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。
優點:
支持多平台的企業級分布式開源監控軟件;
安裝部署簡單,多種數據采集插件靈活集成,功能強大可實現復雜多條件告警;
自帶畫圖功能,得到的數據可以繪成圖形,提供多種API接口,支持調用腳本,出現問題時可自動遠程執行命令。
缺點:
項目批量修改不方便,中文資料少,服務支持有限
入門容易,但是深層次需求需要非常熟悉Zabbix並進行大量的二次定制開發,難度較大;
系統級別報警、報警郵件、自定義項目報警需要自己設置,過程繁瑣,缺少數據匯總功能,數據報表也需要進行二次開發。
Nagios
簡介:
是一款開源的電腦系統和網絡監視工具,能有效監控windows、linux、unix的主機狀態,交換機路由器等網絡設置,打印機等。
優點:
出錯的服務器、應用和設備會自動重啟,自動日志滾動;
配置靈活,可自定義shell腳本,通過分布式監控模式;
支持以冗余方式進行監控主機,報警設置等。
缺點:
事件控制台功能弱,插件易用性差,對性能,,流量等指標的處理差;
無歷史數據難追查故障,配置復雜。
因為公司的業務使用了k8s、docker、mysql、redisconsul、rabbitmq、ansible等組件,對比各種監控系統的優缺點最后決定使用prometheus作為公司的主流監控系統。
二.詳細探究Prometheus
Prometheusan安裝部署(這里采用源碼編譯安裝)
下載Prometheus server
# wget https://github.com/prometheus/prometheus/releases/download/v2.14.0/prometheus-2.14.0.linux-amd64.tar.gz
解壓並進入對應的文件夾
 # tar xvzf prometheus-2.14.0.linux-amd64.tar.gz
# mv prometheus-2.14.0.linux-amd64 /usr/local/
# cd /usr/local/prometheus-2.14.0.linux-amd64/
在后台啟動Prometheus服務
# nohup ./prometheus &     注:nohup ./prometheus是在前台運行
此時,prometheus服務已經在后台運行,暴露的端口號為9090(address=0.0.0.0:9090),可以直接在瀏覽器打開localhost:9090查看簡易控制台

三.結合Grafana更強大、美觀的展示數據
Grafana的安裝部署(https://grafana.com/)
# wget https://dl.grafana.com/oss/release/grafana-6.5.0-1.x86_64.rpm
# sudo yum localinstall grafana-6.5.0-1.x86_64.rpm
# cat /etc/grafana/grafana.ini
# sudo /bin/systemctl start grafana-server.service
此時grafana服務已經啟動,可以直接在瀏覽器里打開http://localhost:3000開始體驗grafana,但是當前監測到的是Prometheus服務,並沒有監測到主機的關鍵度量指標狀態。

四.安裝node_exporter實現對主機度量指標狀態的監控
安裝node_exporter(下載地址:https://github.com/prometheus/node_exporter/releases)
# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz 
進入對應的文件夾:
# tar xfvz node_exporter-0.18.1.linux-amd64.tar.gz
# nohup ./node_exporter &
此時可以直接在瀏覽器打開http://localhost:9100查看node_exporter界面 

在prometheus.yml配置文件中添加node_exporter的相關配置信息

此時在grafana界面中將Node_exporter主機的信息導進去,為了更直觀的監控主機的內存、cpu、磁盤、網絡需要在grafana模板里導入儀表盤。
導入監控內存、cpu、磁盤、網絡的模板:





最后的效果:

五.實現同時監控多台主機(目標主機:192.168.2.235 192.168.2.102 192.168.2.93)
1.分別在每台主機上安裝node_exporter
編輯配置文件如下:

現在可以在瀏覽器中打開192.168.2.85:9090/targets看到目標主機已經被成功監測到了(狀態為up狀態為正常,為down狀態異常)

此時在瀏覽器中打開192.168.2.85:3000,可以在grafana界面中看到每台主機相關參數的使用率

這種每台分別安裝node_exporter的方式只適用於監控目標較少的的情況下,當主機的數量過多時,這種操作很耗時不推薦。
2.ansible批量安裝node_exporter(也可以采用腳本)
安裝ansible
# yum install ansible
查看ansible的版本
# ansible --version
查看ansible的安裝位置
# whereis ansible
利用ansible批量安裝Node_exporter的前提ansible主機可以連接到目標主機,如果不采用免密通信,ansible主機在向目標主機進行操作時,需要密碼,下面實現ansible主機和目標主機免密通信,在ansible主機上進行如下的操作:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.2.235

此時ansible主機再對目標主機進行操作的時候已經是免密的,那么問題又來了,我們使用ansible主機批量安裝Node_exporter的目標是減輕運維工作量,如果目標主機過多的時候像這樣一台一台的去實現免密通信反而會增加我們的工作量,所以在這里使用ansible批量ssh互信
(1).首先關閉公鑰認證
①.[defaults]
host_key_checking = False
②.直接設置環境變量
export ANSIBLE_HOST_KEY_CHECKING=False
(2).使用ssh-key產生公鑰和私鑰
# ssh-keygen -t rsa -b 2048 -P "1qaz-pl," -f /root/.ssh/id_rsa
(3).添加主機信息到hosts文件中

(4).編寫Playbook劇本文件

(5).運行Playbook劇本文件
:/etc/ansible # ansible-playbook -i hosts ssh.yml

(6).現在可以檢驗一下免密通信是否配成功了

此時用ansible來批量安裝node_exporter就會簡單的多
編寫批量安裝的 ansible-playbook劇本文件node.yml如下所示:
---
- hosts: test
user: root
gather_facts: false
tasks:
- name: 安裝node_exporter
unarchive: src=/usr/local/node_exporter-0.18.1.linux-amd64.tar.gz dest=/opt/
- name: 添加node_exporter服務
copy: src=/usr/local/node_exporter-0.18.1.linux-amd64/node_exporter.service dest=/usr/local
- name: 設置開機自動啟動
shell: systemctl enable node_exporter.service
- name: 啟動服務
shell: systemctl start node_exporter.service

執行node.yml劇本文件如下:
# ansible-playbook node.yml -i /etc/ansible/hosts

檢驗批量安裝有沒有成功,進入相應主機的/opt、/usr/local查看有沒有node_exporter-0.18.1.linux-amd64和node_exporter.service,可以看到對應的四台主機相對應的目錄下都有node_exporter相關的信息,這里給出235主機上的結果,其他主機與之相同:

六.基於consul的自動發現監控目標,這樣就避免了每監控一台機器就修改一次prometheus文件。
下載安裝consul
# cd /opt
# mkdir consul
# chmod 777 consul
# cd consul
# wget https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip
# unzip consul_1.3.0_linux_amd64.zip
# cp consul /usr/local/bin/
# consul version
# nohup consul agent -server -data-dir=/usr/local/consul/ -node=agent-one -bind=192.168.2.85 -bootstrap-expect=1 -client=0.0.0.0 -ui &
# ps -ef | grep consul
瀏覽器輸入http://192.168.2.85:8500出現consul界面說明安裝成功:

修改prometheus配置文件,添加如下字段,並重啟prometheus服務。
- job_name: 'consul'
consul_sd_configs:
- server: '192.168.2.85:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .dev.
action: keep

向consul注冊服務
# curl -X PUT -d '{"id": "test1","name": "test1","address": "192.168.2.93","port": 9100,"tags": ["dev"],"checks": [{"http": "http://192.168.2.93:9100/","interval": "5s"}]}' http://localhost:8500/v1/agent/service/register

在consul界面中查看。test1.、test2、test3、test4都已經注冊過來了

此時在瀏覽器輸入http://192.168.2.85:9090/targets,可以看到向consul注冊的服務已經同步到了prometheus。

現在在瀏覽器輸入http://192.168.2.85:3000,添加數據源,覆蓋掉之前的9276模板,可以看到已經成功的監測到了目標主機。

七.實現對windows主機的監控(192.168.3.102)
下載wmi_exporter.(windows) (https://github.com/martinlindhe/wmi_exporter/releases)

直接安裝以9182做監聽端口,在prometheus配置文件中添加如下字段:
- job_name: 'windows'
static_configs:
- targets: ['192.168.3.102:9182']

現在prometheus界面中可以看到windows主機的信息已經同步上來了

最后添加數據源然后在grafana模板里找到監控windows主機的,結果如下所示

八.實現釘釘告警,郵箱告警,企業微信告警,這里grafana有對應的板塊,我們可以直接使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM