1) 背景:站群(大量分布式实例)易出现单点异常难排查。
2) 目标:实现统一指标采集、告警、日志集中检索与留存管理,支持快速定位与容量管控。
3) 要点:轻量监控代理、可伸缩存储、索引与生命周期管理、告警策略、安全隔离。
1) 建议:Prometheus(指标采集)+ Alertmanager(告警)+ Grafana(展示)。
2) 节点采集:node_exporter(主机指标)、cAdvisor(容器)、blackbox exporter(外部可用性)。
3) 可扩展性:Prometheus 使用 federate 或采用 Thanos/Mimir 做长期存储。
1) 下载与部署(以Linux为例):
sudo useradd -rs /bin/false node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar xzf ... && sudo mv node_exporter-*/node_exporter /usr/local/bin/。
2) 创建 systemd 服务:/etc/systemd/system/node_exporter.service 内容:
[Unit]... ExecStart=/usr/local/bin/node_exporter
3) 启动并开机自启:sudo systemctl daemon-reload && sudo systemctl enable --now node_exporter。
4) 在 Prometheus 的 scrape_configs 中加入目标:
- job_name: 'hk-node'
static_configs: - targets: ['10.0.0.5:9100','10.0.0.6:9100']。
1) Prometheus:下载、配置 prometheus.yml(写入各job、scrape_interval、retention)。
2) 启动:用 systemd 或容器方式运行,示例 retention=15d。
3) Grafana:安装后通过数据源连接 Prometheus(URL 指向 prom server),导入常用 dashboard(node、docker、nginx)。
1) 基本告警示例(CPU 超限):
- alert: HighCPU
expr: avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) > 0.8
for: 5m。
2) Alertmanager:配置 receiver(邮件、Webhook、钉钉/Slack),并设置抑制(inhibit_rules)与路由。
3) 测试:使用 amtool 或直接 POST 到 Alertmanager API 模拟告警。
1) 方案对比:ELK(Elasticsearch+Logstash+Kibana)适合全文检索;EFK(Fluentd 替代 Logstash)轻量;Loki 更适合按标签检索,成本低。
2) 建议:站群量大且需结构化分析,推荐 EFK + Elasticsearch ILM;成本敏感可选 Loki+Grafana。
1) Filebeat 安装(Debian/Ubuntu):sudo apt-get install filebeat。
2) 配置 /etc/filebeat/filebeat.yml:paths: - /var/log/nginx/*.log,output.elasticsearch: hosts: ['es.local:9200'] 或 output.logstash 指向 Logstash。
3) 启动并验证:sudo systemctl enable --now filebeat;查看 /var/log/filebeat/filebeat 输出。
4) 批量部署:用 Ansible playbook 将配置分发到所有站群实例并启动服务。
1) 建立索引模板:设置分片/副本、字段类型与时间戳。
2) ILM 策略示例:hot(7天)-> warm(30天)-> cold(90天)-> delete(365天)。
3) 磁盘监控:设置磁盘阈值警告(比如磁盘使用率 80%),并配置 Elasticsearch 水位线(cluster.routing.allocation.disk.watermark.low)。
1) Logrotate:在主机进行日志切割,/etc/logrotate.d/nginx 示例每日切割并保留 7 份。
2) 脱敏:在 Fluentd/Filebeat 采集前做过滤规则(正则替换、插件),避免发送敏感信息到集中存储。
3) 监管合规:按地区法规设置日志保留期与访问控制。
1) 使用 Ansible:roles 包含 node_exporter/filebeat 配置与 systemd 模板;inventory 指定香港 region hosts。
2) 镜像化:在镜像中预装 agent,实例创建后仅注册到监控列表,可通过 Cloud-init 自动运行注册脚本。
3) 标签与元数据:为每个实例设置标签(env, site_id),Prometheus/Grafana 用 label 统一查询与报警。
1) 指标层面:降低采集粒度(高频只保留短期),使用 Downsampling(Thanos)。
2) 日志层面:热数据保持短期高性能索引,冷数据压缩或导出到对象存储(S3/GCS)。
3) 按需采样:对低价值日志进行采样或仅上报异常样本。
1) 定期快照:Elasticsearch 快照到 NAS 或对象存储,cron 每日/每周执行。
2) Prometheus:配置规则文件与数据快照(若使用 Thanos,可跨可用区备份)。
3) 恢复演练:定期演练从快照恢复索引、Prometheus 规则与 Grafana 仪表板。
答:优先监控 CPU、内存、磁盘使用、磁盘 I/O、网络吞吐与错误率(如 5xx)、进程/服务存活、容器重启次数与应用延迟(请求 P95/P99)。同时监控磁盘剩余、文件句柄、连接数等会直接导致实例不可用的指标。
答:采用分层存储(热/暖/冷)、日志采样(只保留全部请求的 1% 或异常样本)、结构化日志只索引关键字段、将旧日志转储到对象存储并生命周期自动删除,同时使用 Loki 等按标签检索的方案降低索引开销。
答:在采集端做脱敏或掩码(正则替换)、对日志存储开启加密(传输 TLS + 存储端加密)、使用细粒度 RBAC(Kibana/Grafana/ES 都要配置)、并设置审计日志与保留策略以满足当地法律要求(例如个人信息最小化与定期销毁)。