aryaman22-hubb/Monitoring-and-Incident-Response

GitHub: aryaman22-hubb/Monitoring-and-Incident-Response

一套基于 Docker Compose 的容器化可观测性技术栈,为 Node.js 应用提供指标采集、日志记录、可视化仪表盘和告警通知的完整监控能力。

Stars: 0 | Forks: 0

# 监控与事件响应(可观测性技术栈) 本仓库包含一个可用于生产环境、完全容器化的可观测性技术栈,专为 Node.js + Express 应用程序构建。它集成了指标跟踪、结构化 JSON 日志记录、仪表盘、告警规则以及通知端点。 ## 架构图 ``` +-----------------------+ | | +------------->+ Grafana +<------------+ | | (Port 3001) | | | +-----------+-----------+ | | | | | Queries | Reads | | v | +---------+-----------+ Scrapes | +-------------+-------+ | +<-------------+ | | | Prometheus | | Alertmanager | | (Port 9090) +------------------------->+ (Port 9093) | | | Sends Alerts | | +---------^-----------+ +----------+----------+ | | | Scrapes | Sends Webhook | | (Alert details) | v +---------+-----------+ +----------+----------+ | | | | | Node.js App +<-------------------------+ Node.js App | | (Express/Winston) | | POST /webhook | | (Port 3000) | | | +---------------------+ +---------------------+ ``` ## 使用的技术 * **后端:** Node.js、Express、Winston(结构化 JSON Logger)、prom-client * **可观测性:** Prometheus、Alertmanager、Grafana * **部署:** Docker、Docker Compose ## 技术栈的设置与运行 要构建并启动整个技术栈: ``` docker-compose up --build ``` 验证所有容器是否健康: ``` docker ps ``` ### 访问 URL | 服务 | 端口 | 端点 URL | 凭证 / 备注 | | :--- | :--- | :--- | :--- | | **Node.js App** | `3000` | `http://localhost:3000` | 暴露应用端点 | | **Prometheus** | `9090` | `http://localhost:9090` | 告警规则和抓取目标界面 | | **Grafana** | `3001` | `http://localhost:3001` | 预配置管理员模式 / 仪表盘自动加载 | | **Alertmanager** | `9093` | `http://localhost:9093` | 通知路由和活动告警状态 | ## 流量生成与验证 为了验证监控是否正常工作并填充 Grafana 图表,您可以生成流量。 ### 1. 正常流量循环 在终端中运行此 curl 命令,以持续请求 `/` 和 `/health` 端点: ``` for i in {1..50}; do curl -s http://localhost:3000/ > /dev/null; curl -s http://localhost:3000/health > /dev/null; sleep 0.5; done ``` ### 2. 触发告警(`HighErrorRate`) 当 HTTP 500 错误率超过 **2%** 时,将触发告警条件。快速请求 `/fail` 端点(该端点会随机失败并返回 500 状态码): ``` for i in {1..60}; do curl -s http://localhost:3000/fail; sleep 0.1; done ``` ### 3. 观察告警的执行过程 1. **Prometheus UI:** 导航到 `http://localhost:9090/alerts`。您将看到 `HighErrorRate` 从 `Pending` 变为 `Firing`。 2. **Node 应用日志:** 当 Alertmanager 触发时,它将 webhook 路由到 Node 应用程序。检查日志: docker logs node-app | grep "Alertmanager Notification Received" 您将看到完全序列化的告警 JSON 作为 Winston 日志事件清晰地打印到 stdout 中。 ## 系统配置详情 ### 1. 日志记录 Winston 被配置为以单行 JSON 格式写入日志。每条日志包括: * `timestamp` * 日志 `level`(`info`、`error`) * `requestId`(分配给每个请求的关联 UUID) * 请求的 `method`、`path`、`status` 和 `responseTimeMs` * HTTP 500 / 异常情况下的错误堆栈跟踪位于 `stack` 字段下 ### 2. 指标 `prom-client` 收集 Node.js 进程指标(GC、内存使用、CPU)和自定义 HTTP 指标: * `http_requests_total`:跟踪总请求数的 Counter,包含 `method`、`route` 和 `status` 标签。 * `http_request_duration_seconds`:测量响应延迟的 Histogram。 * `node_active_requests`:在请求开始时递增、在终止时递减的 Gauge。 ### 3. Alertmanager 配置 路由规则将所有处于 firing 状态的触发器映射到后端 webhook 路径 `http://app:3000/webhook`。 ### 4. Grafana 仪表盘 使用 JSON 规范自动配置。它包含 6 个面板: 1. **总请求数** 2. **活动请求数** 3. **错误率 %**(低于 2% 显示绿色,高于 2% 变为红色) 4. **请求/秒(按路由)** 5. **P95 延迟** 6. **按状态码划分的请求数** ## Runbook 有关 `HighErrorRate` 告警触发时的诊断和恢复步骤,请参阅 [runbook.md](file:///d:/kalvium%20assignment/Monitoring-and-Incident-Response/runbook.md)。
标签:API集成, Docker, GNU通用公共许可证, Grafana, MITM代理, Node.js, 可观测性, 安全防御评估, 版权保护, 监控告警, 自定义脚本, 自定义请求头, 请求拦截, 运维