目錄
第二步:在192.168.248.11 上安裝Prometheus
第四步:在192.168.248.11 上安裝Grafana
第五步:在Prometheus服務器上安裝alermanager
准備一台Prometheus服務器 192.168.248.11
一台被監控服務器 192.168.248.12
安裝Prometheus服務
tar -xzf go1.8.3.linux-amd64.tar.gz -C /usr/local
vim /etc/profile
#在文件最下面添加go環境
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export PATH=$PATH:/usr/local/go/bin

#保存退出后,讓配置文件生效:
source /etc/profile
#驗證是否成功
go version

#去官網下載對應的系統的版本,官方地址:
https://prometheus.io/download/

#傳入服務器,解壓到/usr/local
tar -vxf prometheus-2.33.4.linux-amd64.tar.gz -C /usr/local

#為了以后方便進入目錄,可以做個軟連接
ln -sv /usr/local/prometheus-2.33.4.linux-amd64.tar.gz -C /usr/local/Prometheus
#配置監控的配置文件:prometheus.yml

#運行該文件
cd /usr/local/Prometheus
./prometheus
#通過url 192.168.248.11:9090,點擊targets跳轉到監控目標

#主機數據展示

#在web主頁面可以通過關鍵字查詢監控項

#補充:可以將Prometheus服務放入系統服務里,使用systemctl啟動
cd /usr/lib/systemd/system
vim prometheus.service
[Unit] Description=prometheus System Documentation=https://prometheus.io [Service] Restart=on-failure ExecStart=/usr/local/prometheus/prometheus --storage.tsdb.path=/usr/local/prometheus/data --config.file=/usr/local/prometheus/prometheus.yml [Install] WantedBy=multi-user.target


#在遠程linux主機(被監控端安裝node_exporter組件)

tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/node_exporter-0.16.0.linux-amd64/ /usr/local/node_exporter
#包里只有一個啟動命令node_exporter,可以直接使用此命令啟動
nohup /usr/local/node_exporter/node_exporter &

#再開一個終端,確認9100的端口

#Tip:nohup命令:如果把啟動node_exporter的終端給關閉,那么進程也會隨之關閉。nohup命令會幫我們解決這個問題
#通過訪問192.168.248.12:9100/metrics可以查看node_exporter在被監控端收集的監控信息

#在192.168.248.11這台服務器的配置文件里添加被監控及其的配置段

#重啟服務,先關閉上次打開的進程

#在192.168.248.11這台服務器 lsof -i:9090

kill -9 44410
cd /usr/local/Prometheus
./prometheus

#貼士:可以將node exporter加入系統啟動
cd /usr/lib/systemd/system
vim node_exporter.service
[Unit] Description=Prometheusnode_exporter [Service] User=nobody ExecStart=/usr/local/node_exporter/node_exporter --log.level=error ExecStop=/usr/bin/killallnode_exporter [Install] WantedBy=default.target

rpm -ivh grafana-5.3.4-1.x86_64.rpm
## sudo yum install grafana-enterprise-7.2.0-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server
#檢查端口 lsof -i:3000

#瀏覽器訪問192.168.248.11:3000





#配置dashboard
#登錄grafana的dashboard平台,查詢所需的json文件,地址:
https://grafana.com/grafana/dashboards
#去官網尋找對應的表盤,這里選擇node exporter監控看板
#在grafana中導入表盤
#訪問
https://grafana.com/grafana/dashboards/8919/revisions 下載最小的json,或copy對應id



#grafana的dashboard安裝成功界面展示

==================Prometheus+Grafana安裝完成============================
#在192.168.248.12 上安裝mysql並加入Prometheus的監控
#下載
#解壓:
tar xf mysqld_exporter-0.11.0.linux-amd64.tar.gz -C /usr/local/
#創建一個mysql配置文件,寫上連接的用戶名和密碼(這個用戶需要被授予遠程訪問的權限)
vim /usr/local/mysqld_exporter-0.11.0.linux-amd64/.my.cnf
[client]
user=abc
password=123456
#啟動mysql的監控
nohup /usr/local/mysqld_exporter-0.11.0.linux-amd64/mysqld_exporter --config.my.cnf=/usr/local/mysqld_exporter-0.11.0.linux-amd64/.my.cnf &
#將mysql的監控配置到192.168.248.11上
cd /usr/local/Prometheus
vim /prometheus.yml
#文件末尾添加如下內容,注意縮進
- job_name:'agent_mysql'
static_configs:
- targets:['192.168.246.12:9104']
#殺死原進程,再啟動新進程
lsof -i:9090
cd /usr/local/Prometheus
./prometheus

=======================mysql添加到Prometheus完成=========================
上面的Prometheus服務安排在192.168.80.11上,下面的統一安排在192.168.80.14上
# 下載地址:
https://prometheus.io/download/

#或者
tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz
mv alertmanager-0.21.0.linux-amd64 /usr/local/alertmanager
#我這里用的是0.23.0的版本
#修改配置文件
cd /usr/local/alertmanager
vim alertmanager.yml
global: resolve_timeout: 5m smtp_from: '17****818@qq.com' #郵箱地址 smtp_smarthost: 'smtp.qq.com:465' #郵箱smtp服務器代理 smtp_auth_username: '17*****718@qq.com' # 郵箱名稱 smtp_auth_password: '*****' #授權碼 smtp_require_tls: false smtp_hello: 'qq.com' route: group_by: ['alertname'] #報警分組依據 group_wait: 5s #最初即第一次等待多久時間發送一組警報的通知 group_interval: 5s # 在發送新警報前的等待時間 repeat_interval: 30m # 發送重復警報的周期 對於email配置中,此項不可以設置過低,>否則將會由於郵件發送太多頻繁,被smtp服務器拒絕 receiver: 'email' # 發送警報的接收者的名稱,以下receivers name的名稱 receivers: - name: 'email' email_configs: # 郵箱配置 - to: '17*****8@qq.com' # 接收警報的email配置 headers: { Subject: "[WARN] 報警郵件"} # 接收郵件的標題 send_resolved: true inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']

#檢測yml文件是否有語法錯誤
./amtool check-config alertmanager.yml

#啟動alertmanager
cd /usr/local/alertmanager
./alertmanager

#修改Prometheus配置文件
cd /usr/local/prometheus/
vim prometheus.yml
cd /usr/local/prometheus vim prometheus.yml # my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: ['localhost:9093'] #alermanager地址 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: - "/usr/local/prometheus/rules/*.yml" #規則存放路徑 # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.

#創建rules規則目錄
cd /usr/local/prometheus
mkdir rules
cd rules

#添加報警規則
vim system_info.yml
groups: - name: 主機狀態-監控告警 rules: - alert: 主機狀態 expr: up == 0 for: 5m labels: status: 非常嚴重 annotations: summary: "{{$labels.instance}}:服務器宕機" description: "{{$labels.instance}}:服務器延時超過5分鍾" - alert: CPU使用情況 expr: 100-(avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)* 100) > 80 for: 1m labels: status: 一般告警 annotations: summary: "{{$labels.instance}} CPU使用率過高!" description: "{{$labels.instance }} CPU使用大於80%(目前使用:{{$value}}%)" - alert: 內存使用 expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80 for: 1m labels: status: 嚴重告警 annotations: summary: "{{$labels.instance}} 內存使用率過高!" description: "{{$labels.instance }} 內存使用大於80%(目前使用:{{$value}}%)" - alert: IO性能 expr: (avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) > 80 for: 1m labels: status: 嚴重告警 annotations: summary: "{{$labels.instance}} 流入磁盤IO使用率過高!" description: "{{$labels.instance }} 流入磁盤IO大於80%(目前使用:{{$value}})" - alert: 網絡 expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400 for: 1m labels: status: 嚴重告警 annotations: summary: "{{$labels.instance}} 流入網絡帶寬過高!" description: "{{$labels.instance }}流入網絡帶寬持續2分鍾高於100M. RX帶寬使用率{{$value}}" - alert: 網絡 expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400 for: 1m labels: status: 嚴重告警 annotations: summary: "{{$labels.instance}} 流出網絡帶寬過高!" description: "{{$labels.instance }}流出網絡帶寬持續2分鍾高於100M. RX帶寬使用率{{$value}}" - alert: TCP會話 expr: node_netstat_Tcp_CurrEstab > 1000 for: 1m labels: status: 嚴重告警 annotations: summary: "{{$labels.instance}} TCP_ESTABLISHED過高!" description: "{{$labels.instance }} TCP_ESTABLISHED大於1000(目前使用:{{$value}}%)" - alert: 磁盤容量 expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 80 for: 1m labels: status: 嚴重告警 annotations: summary: "{{$labels.instance}} 磁盤分區使用率過高!" description: "{{$labels.instance }} 磁盤分區使用大於80%(目前使用:{{$value}}%)"

#重啟Prometheus服務
systemctl restart prometheus
#進瀏覽器查看警報

#郵箱展示(由於我這里郵箱名字給錯了,所有顯示發送失敗

=================================alertmanager報警配置完成============================