从‘它又挂了’到‘稳如老狗’:我是如何用Prometheus+Grafana给自家小破站做监控的
从“它又挂了”到“稳如老狗”我是如何用PrometheusGrafana给自家小破站做监控的凌晨三点手机突然响起钉钉告警——这已经是本周第三次被“502 Bad Gateway”的提示音吵醒。揉着惺忪睡眼重启Nginx时我突然意识到这个用业余时间维护的个人博客正在消耗远超预期的精力。如果你也经历过服务器突然崩溃却找不到原因、或是流量小高峰时手忙脚乱调整配置的窘境这套用PrometheusGrafana搭建的轻量监控方案或许能让你和我一样告别“救火队员”的角色。1. 为什么个人项目更需要监控很多人认为监控是企业级应用的专利直到某天发现隐性故障数据库连接池悄悄耗尽用户看到的是“偶尔抽风”事后复盘没有历史数据故障排查变成“盲人摸象”资源黑洞某个跑偏的脚本吃光内存连带拖垮整个服务我的博客运行在2核4G的云服务器上使用率长期低于30%。直到某天收到云厂商的流量超额账单才发现被爬虫持续扫描漏洞。正是这次教训让我明白监控不是成本而是性价比最高的运维投资。2. 监控方案选型为什么是PrometheusGrafana对比常见方案工具优点缺点适合场景Zabbix功能全面资源占用高企业级环境Nagios告警机制成熟配置复杂传统运维CloudWatch开箱即用费用随数据量增长AWS深度用户Prometheus轻量、时序数据专业处理需要自行搭建容器/微服务/个人项目Prometheus的多维度数据模型和Pull模式特别适合资源有限的场景。配合Grafana的可视化能力不到1GB内存就能获得企业级80%的监控功能。提示如果你的服务器内存小于1G可以考虑关闭Prometheus的TSDB压缩storage.tsdb.retention.size参数3. 实战部署从零搭建监控系统3.1 安装Prometheus用Docker快速启动假设已安装Dockermkdir -p /opt/prometheus/config cat EOF /opt/prometheus/config/prometheus.yml global: scrape_interval: 15s scrape_configs: - job_name: prometheus static_configs: - targets: [localhost:9090] EOF docker run -d --nameprometheus \ -p 9090:9090 \ -v /opt/prometheus/config:/etc/prometheus \ prom/prometheus关键参数说明scrape_interval抓取频率个人站点建议15-30秒targets监控目标地址后续会逐步添加3.2 接入基础指标3.2.1 监控服务器本身安装node_exporter采集主机指标docker run -d --namenode_exporter \ -p 9100:9100 \ --nethost \ --pidhost \ -v /:/host:ro,rslave \ prom/node-exporter然后在prometheus.yml中添加新job- job_name: node static_configs: - targets: [your_server_ip:9100]3.2.2 监控Nginx启用Nginx stub_status模块server { listen 8080; server_name localhost; location /metrics { stub_status on; access_log off; allow 127.0.0.1; deny all; } }通过nginx-exporter转换指标格式docker run -d --namenginx-exporter \ -p 9113:9113 \ nginx/nginx-prometheus-exporter \ -nginx.scrape-uri http://your_nginx_ip:8080/metrics3.3 配置Grafana仪表盘启动Grafana容器docker run -d --namegrafana \ -p 3000:3000 \ grafana/grafana登录后添加Prometheus数据源地址填http://prometheus:9090导入官方仪表盘主机监控ID 1860Nginx监控ID 12708我的自定义看板重点关注黄金指标请求错误率、响应时间、流量资源水位线CPU80%或内存90%持续5分钟告警业务指标每日活跃用户、热门内容排行4. 告警配置从被动响应到主动预防4.1 基础告警规则在prometheus.yml同级目录创建alert.rules文件groups: - name: host rules: - alert: HighCPU expr: 100 - (avg by(instance)(irate(node_cpu_seconds_total{modeidle}[5m])) * 100) 80 for: 5m labels: severity: warning annotations: summary: 高CPU使用率 ({{ $value }}%) description: 实例 {{ $labels.instance }} CPU持续高于80% - alert: NginxDown expr: nginx_up 0 for: 1m labels: severity: critical annotations: summary: Nginx服务下线4.2 对接钉钉告警使用Prometheus Alertmanager 钉钉机器人配置alertmanager.ymlroute: receiver: dingding receivers: - name: dingding webhook_configs: - url: https://oapi.dingtalk.com/robot/send?access_tokenyour_token send_resolved: true启动Alertmanager容器docker run -d --namealertmanager \ -p 9093:9093 \ -v /path/to/alertmanager.yml:/etc/alertmanager/alertmanager.yml \ prom/alertmanager5. 避坑指南那些年我踩过的雷指标爆炸初期采集了太多无用指标导致Prometheus存储暴涨解决方案用metric_relabel_configs过滤metric_relabel_configs: - source_labels: [__name__] regex: (node_network_receive_bytes|node_cpu_seconds_total) action: keep告警疲劳最初设置的阈值太敏感半夜频繁被吵醒优化方案区分warning/critical级别非核心服务设置工作时间告警资源竞争监控系统自身消耗过高实测数据2核4G服务器Prometheus约300MB内存node_exporter15MB内存Grafana200MB内存6. 进阶技巧让监控产生业务价值除了基础运维指标我还逐步添加了用户体验监控通过Nginx日志分析慢请求# 统计P99响应时间 histogram_quantile(0.99, sum(rate(nginx_http_request_duration_seconds_bucket[5m])) by (le))成本关联结合云API获取费用数据建立“流量-资源-成本”关联分析自动化联动当检测到爬虫特征时自动触发WAF规则更新现在我的早晨例行检查从SSH登录变成了打开手机看Grafana仪表盘。有次朋友问我“你网站最近怎么这么稳定”我笑着回答“因为我知道它什么时候会出问题——在用户发现之前。”
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2466946.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!