1. 系统监控简介
系统监控是IT运维的重要组成部分,用于实时监控IT系统的运行状态,及时发现和解决问题。更多学习教程www.fgedu.net.cn
系统监控的主要目标:
- 实时监控系统性能和健康状态
- 及时发现和解决系统故障
- 预测系统性能瓶颈和容量需求
- 优化系统资源使用
- 确保服务可用性和可靠性
2. 监控工具介绍
市场上有多种监控工具,每种工具都有其特点和适用场景。
## 开源监控工具
1. **Prometheus**:开源的监控系统和时间序列数据库
2. **Grafana**:开源的数据可视化和监控平台
3. **Nagios**:开源的网络监控和告警系统
4. **Zabbix**:开源的企业级监控解决方案
5. **Icinga**:Nagios的分支,提供更现代的界面和功能
6. **Netdata**:实时性能监控工具
7. **ELK Stack**:用于日志分析和监控
## 商业监控工具
1. **Datadog**:云原生监控平台
2. **New Relic**:应用性能监控平台
3. **Dynatrace**:AI驱动的可观测性平台
4. **AppDynamics**:应用性能管理工具
5. **SolarWinds**:IT基础设施监控工具
3. 系统监控配置
系统监控主要关注服务器的CPU、内存、磁盘、网络等资源的使用情况。
# 安装Prometheus
# 下载Prometheus
# wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
# 解压
# tar xvfz prometheus-2.37.0.linux-amd64.tar.gz
# cd prometheus-2.37.0.linux-amd64
# 配置Prometheus
# vi prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
– job_name: ‘prometheus’
static_configs:
– targets: [‘fgedudb:9090’]
– job_name: ‘node’
static_configs:
– targets: [‘fgedudb:9100’]
# 安装Node Exporter
# wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
# tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz
# cd node_exporter-1.3.1.linux-amd64
# ./node_exporter &
# 启动Prometheus
# ./prometheus –config.file=prometheus.yml &
# 安装Grafana
# 添加Grafana仓库
# vi /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
gpgcheck=1
enabled=1
gpgkey=https://packages.grafana.com/gpg.key
# 安装Grafana
# yum install -y grafana
# 启动Grafana
# systemctl start grafana-server
# systemctl enable grafana-server
# 访问Grafana
# 打开浏览器,访问 http://fgedudb:3000
# 默认fgedu和密码:admin/admin
# 配置Grafana数据源
# 1. 登录Grafana
# 2. 点击左侧菜单的”Configuration” > “Data sources”
# 3. 点击”Add data source”
# 4. 选择”Prometheus”
# 5. 在”URL”字段中输入”http://fgedudb:9090″
# 6. 点击”Save & Test”
# 导入系统监控仪表盘
# 1. 点击左侧菜单的”Dashboards”
# 2. 点击”Import”
# 3. 输入仪表盘ID:1860
# 4. 点击”Load”
# 5. 选择Prometheus数据源
# 6. 点击”Import”
4. 网络监控配置
网络监控主要关注网络设备的状态、网络连接、带宽使用等。
# 安装Blackbox Exporter
# wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.19.0/blackbox_exporter-0.19.0.linux-amd64.tar.gz
# tar xvfz blackbox_exporter-0.19.0.linux-amd64.tar.gz
# cd blackbox_exporter-0.19.0.linux-amd64
# 配置Blackbox Exporter
# vi blackbox.yml
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_http_versions: [“HTTP/1.1”, “HTTP/2.0”]
valid_status_codes: [] # Defaults to 2xx
method: GET
no_follow_redirects: false
fail_if_ssl: false
fail_if_body_matches_regexp: []
fail_if_body_not_matches_regexp: []
fail_if_header_matches_regexp: {}
fail_if_header_not_matches_regexp: {}
icmp:
prober: icmp
timeout: 5s
icmp:
preferred_ip_protocol: “ip4″
# 启动Blackbox Exporter
# ./blackbox_exporter –config.file=blackbox.yml &
# 配置Prometheus监控网络
# vi prometheus.yml
scrape_configs:
– job_name: ‘blackbox’
metrics_path: /probe
params:
module: [http_2xx] # Look for a HTTP 200 response
static_configs:
– targets:
– http://fgedudb:3000 # Grafana
– http://fgedudb:9090 # Prometheus
relabel_configs:
– source_labels: [__address__]
target_label: __param_target
– source_labels: [__param_target]
target_label: instance
– target_label: __address__
replacement: fgedudb:9115 # The blackbox exporter’s real hostname:port
– job_name: ‘icmp’
metrics_path: /probe
params:
module: [icmp] # Use the icmp module
static_configs:
– targets:
– 127.0.0.1
– 192.168.1.1
relabel_configs:
– source_labels: [__address__]
target_label: __param_target
– source_labels: [__param_target]
target_label: instance
– target_label: __address__
replacement: fgedudb:9115 # The blackbox exporter’s real hostname:port
# 重启Prometheus
# kill -HUP $(pgrep prometheus)
# 导入网络监控仪表盘
# 1. 点击左侧菜单的”Dashboards”
# 2. 点击”Import”
# 3. 输入仪表盘ID:7587
# 4. 点击”Load”
# 5. 选择Prometheus数据源
# 6. 点击”Import”
5. 应用监控配置
应用监控主要关注应用的运行状态、响应时间、错误率等。
# 安装Prometheus Client Library
## 对于Python应用
# pip install prometheus-client
# 示例Python应用代码
# vi app.py
from flask import Flask
from prometheus_client import Counter, Gauge, Histogram, Summary, start_http_server
import time
app = Flask(__name__)
# 定义指标
REQUEST_COUNT = Counter(‘request_count’, ‘Total request count’)
REQUEST_LATENCY = Histogram(‘request_latency_seconds’, ‘Request latency’)
ACTIVE_REQUESTS = Gauge(‘active_requests’, ‘Active requests’)
REQUEST_SIZE = Summary(‘request_size_bytes’, ‘Request size’)
@app.route(‘/’)
def hello():
REQUEST_COUNT.inc()
ACTIVE_REQUESTS.inc()
start_time = time.time()
time.sleep(0.1) # 模拟处理时间
latency = time.time() – start_time
REQUEST_LATENCY.observe(latency)
ACTIVE_REQUESTS.dec()
return ‘Hello, World!’
if __name__ == ‘__main__’:
# 启动Prometheus metrics端点
start_http_server(8000)
app.run(host=’0.0.0.0′, port=5000)
# 运行应用
# python app.py &
# 配置Prometheus监控应用
# vi prometheus.yml
scrape_configs:
– job_name: ‘python-app’
static_configs:
– targets: [‘fgedudb:8000’]
# 重启Prometheus
# kill -HUP $(pgrep prometheus)
# 导入应用监控仪表盘
# 1. 点击左侧菜单的”Dashboards”
# 2. 点击”Import”
# 3. 输入仪表盘ID:10283
# 4. 点击”Load”
# 5. 选择Prometheus数据源
# 6. 点击”Import”
6. 数据库监控配置
数据库监控主要关注数据库的性能、连接数、查询执行情况等。
# 安装MySQL Exporter
# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
# tar xvfz mysqld_exporter-0.14.0.linux-amd64.tar.gz
# cd mysqld_exporter-0.14.0.linux-amd64
# 创建MySQL用户
# mysql -u root -p
CREATE USER ‘exporter’@’fgedudb’ IDENTIFIED BY ‘password’ WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO ‘exporter’@’fgedudb’;
FLUSH PRIVILEGES;
EXIT;
# 创建配置文件
# vi .my.cnf
[client]
user=exporter
password=password
# 启动MySQL Exporter
# ./mysqld_exporter –config.my-cnf=.my.cnf &
# 配置Prometheus监控MySQL
# vi prometheus.yml
scrape_configs:
– job_name: ‘mysql’
static_configs:
– targets: [‘fgedudb:9104’]
# 重启Prometheus
# kill -HUP $(pgrep prometheus)
# 导入MySQL监控仪表盘
# 1. 点击左侧菜单的”Dashboards”
# 2. 点击”Import”
# 3. 输入仪表盘ID:7362
# 4. 点击”Load”
# 5. 选择Prometheus数据源
# 6. 点击”Import”
7. 告警配置与管理
告警配置用于在系统出现问题时及时通知运维人员。
# 创建告警规则文件
# vi alert.rules
groups:
– name: system-alerts
rules:
– alert: HighCPUUsage
expr: 100 – (avg by(instance) (irate(node_cpu_seconds_total{mode=”idle”}[5m])) > 80
for: 5m
labels:
severity: warning
annotations:
summary: “High CPU Usage on {{ $labels.instance }}”
description: “CPU usage is above 80% for 5 minutes”
– alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes – node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: “High Memory Usage on {{ $labels.instance }}”
description: “Memory usage is above 90% for 5 minutes”
– alert: DiskSpaceLow
expr: (node_filesystem_size_bytes{mountpoint=”/”} – node_filesystem_free_bytes{mountpoint=”/”}) / node_filesystem_size_bytes{mountpoint=”/”} * 100 > 85
for: 10m
labels:
severity: critical
annotations:
summary: “Disk Space Low on {{ $labels.instance }}”
description: “Disk space usage is above 85% for 10 minutes”
# 配置Prometheus使用告警规则
# vi prometheus.yml
rule_files:
– “alert.rules”
alerting:
alertmanagers:
– static_configs:
– targets: [‘fgedudb:9093’]
# 安装Alertmanager
# wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz
# tar xvfz alertmanager-0.23.0.linux-amd64.tar.gz
# cd alertmanager-0.23.0.linux-amd64
# 配置Alertmanager
# vi alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: [‘alertname’]
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: ’email’
receivers:
– name: ’email’
email_configs:
– to: ‘admin@fgedu.net.cn’
from: ‘alertmanager@fgedu.net.cn’
smarthost: ‘smtp.fgedu.net.cn:587’
auth_username: ‘alertmanager’
auth_password: ‘password’
require_tls: true
# 启动Alertmanager
# ./alertmanager –config.file=alertmanager.yml &
# 重启Prometheus
# kill -HUP $(pgrep prometheus)
# 查看告警状态
# 打开浏览器,访问 http://fgedudb:9090/alerts
8. 监控仪表盘创建
创建自定义监控仪表盘可以更直观地展示系统状态。
# 1. 登录Grafana
# 2. 点击左侧菜单的”Dashboards”
# 3. 点击”New dashboard”
# 4. 点击”Add new panel”
# 5. 在”Query”标签页中,选择Prometheus数据源
# 6. 输入查询语句,例如:
# 100 – (avg by(instance) (irate(node_cpu_seconds_total{mode=”idle”}[5m]))
# 7. 在”Visualization”标签页中,选择图表类型
# 8. 在”General”标签页中,设置面板标题
# 9. 点击”Apply”
# 10. 点击”Save dashboard”
# 11. 输入仪表盘名称,点击”Save”
# 导出仪表盘
# 1. 打开仪表盘
# 2. 点击右上角的”Settings”图标
# 3. 点击”JSON Model”
# 4. 复制JSON内容
# 5. 保存到文件中
# 导入仪表盘
# 1. 点击左侧菜单的”Dashboards”
# 2. 点击”Import”
# 3. 粘贴JSON内容或上传文件
# 4. 点击”Load”
# 5. 选择数据源
# 6. 点击”Import”
9. 监控最佳实践
以下是系统监控的一些最佳实践。
1. 全面监控:监控所有关键系统组件,包括服务器、网络、应用、数据库等
2. 合理设置告警阈值:根据系统正常运行时的基线设置合理的告警阈值
3. 分级告警:根据问题的严重程度设置不同级别的告警
4. 告警聚合:对相似的告警进行聚合,避免告警风暴
5. 自动修复:对一些常见问题实现自动修复
6. 定期回顾:定期回顾监控数据和告警,优化监控策略
7. 容量规划:根据监控数据进行容量规划,预测未来需求
8. 监控可视化:创建直观的监控仪表盘,便于快速了解系统状态
9. 灾备演练:定期进行灾备演练,测试监控系统的有效性
10. 文档完善:完善监控系统的文档,包括监控项、告警规则、处理流程等
10. 监控故障排查
当监控系统出现问题时,以下是一些常见的故障排查方法。
# 1. 检查Prometheus状态
# curl http://fgedudb:9090/metrics
# 2. 检查Exporter状态
# curl http://fgedudb:9100/metrics # Node Exporter
# curl http://fgedudb:9104/metrics # MySQL Exporter
# curl http://fgedudb:9115/metrics # Blackbox Exporter
# 3. 检查Alertmanager状态
# curl http://fgedudb:9093/metrics
# 4. 检查Grafana状态
# curl http://fgedudb:3000/api/health
# 5. 检查网络连接
# ping fgedudb
# telnet fgedudb 9090
# telnet fgedudb 3000
# 6. 检查日志
# tail -f /var/log/prometheus/prometheus.log
# tail -f /var/log/grafana/grafana.log
# 7. 常见问题及解决方案:
# 监控数据不显示:检查Exporter是否运行,检查网络连接,检查Prometheus配置
# 告警不触发:检查告警规则是否正确,检查数据是否达到阈值,检查Alertmanager配置
# 仪表盘显示异常:检查数据源配置,检查查询语句,检查网络连接
# 系统性能下降:检查监控系统本身的资源使用,优化监控频率和数据存储
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
