夜莺开源监控如何使用 Docker 部署,有哪些注意事项?
·
夜莺开源监控如何使用 Docker 部署,有哪些注意事项?
简介夜莺(Nightingale)是一款开源的、分布式的、高性能的监控系统,由滴滴开源,支持 Prometheus、VictoriaMetrics 等时序数据库,提供告警、可视化、自愈等能力。对于运维团队而言,使用 Docker 部署夜莺可以快速搭建监控环境,避免依赖冲突,但部署过程中也会遇到一些“坑”。本文将从实战角度出发,通过大量代码示例,详细讲解如何用 Docker 部署夜莺,并总结关键注意事项。## 环境准备在开始之前,确保你的机器已经安装了 Docker 和 Docker Compose。推荐使用 Linux 系统(如 CentOS 7+ 或 Ubuntu 20.04+),因为夜莺的某些组件(如 Redis、MySQL)依赖系统资源。bash# 检查 Docker 版本docker --version# 检查 Docker Compose 版本docker-compose --version如果未安装,请参考官方文档快速安装。本教程使用的版本:- Docker: 24.0.7- Docker Compose: v2.23.0- 夜莺: v7.0.1## 第一步:拉取镜像和准备配置文件夜莺官方提供了 Docker 镜像,我们直接使用 docker-compose.yml 文件来编排服务。首先创建一个项目目录:bashmkdir nightingale-deploycd nightingale-deploy然后创建 docker-compose.yml 文件。注意:夜莺需要依赖 Redis、MySQL(或 MariaDB)以及时序数据库(这里用 VictoriaMetrics 作为示例,因为它轻量且兼容 Prometheus)。yamlversion: '3.8'services: # MySQL 数据库,用于存储夜莺的元数据 mysql: image: mysql:8.0 container_name: nightingale-mysql environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: nightingale MYSQL_USER: nightingale MYSQL_PASSWORD: nightingale123 volumes: - ./mysql-data:/var/lib/mysql # 持久化数据 ports: - "3306:3306" networks: - nightingale-net healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 # Redis 缓存,用于夜莺的会话和队列 redis: image: redis:7-alpine container_name: nightingale-redis volumes: - ./redis-data:/data ports: - "6379:6379" networks: - nightingale-net # VictoriaMetrics 时序数据库,用于存储监控指标 victoria-metrics: image: victoriametrics/victoria-metrics:v1.95.1 container_name: nightingale-vm volumes: - ./victoria-metrics-data:/victoria-metrics-data ports: - "8428:8428" command: - '-storageDataPath=/victoria-metrics-data' - '-httpListenAddr=:8428' networks: - nightingale-net # 夜莺服务器核心组件(n9e-server) n9e-server: image: ccr.ccs.tencentyun.com/n9e/n9e-server:v7.0.1 container_name: nightingale-server environment: - TZ=Asia/Shanghai volumes: - ./etc/server.conf:/app/etc/server.conf # 挂载配置文件 - ./logs/server:/app/logs ports: - "19000:19000" # HTTP API 端口 depends_on: mysql: condition: service_healthy redis: condition: service_started victoria-metrics: condition: service_started networks: - nightingale-net # 夜莺前端界面(n9e-webapi) n9e-webapi: image: ccr.ccs.tencentyun.com/n9e/n9e-webapi:v7.0.1 container_name: nightingale-webapi environment: - TZ=Asia/Shanghai volumes: - ./etc/webapi.conf:/app/etc/webapi.conf - ./logs/webapi:/app/logs ports: - "18000:18000" # Web 前端端口 depends_on: - n9e-server networks: - nightingale-netnetworks: nightingale-net: driver: bridge## 第二步:编写配置文件夜莺的配置文件是关键。我们需要两个配置文件:server.conf 和 webapi.conf。先创建目录结构:bashmkdir -p etc logs server-data redis-data mysql-data victoria-metrics-data### 编写 server.conf这是夜莺服务器的核心配置,包含数据库连接、Redis 连接、时序数据库地址等。注意替换占位符。bashcat > etc/server.conf << 'EOF'# 夜莺服务器配置文件# 数据库配置[DB]DSN = "root:root123@tcp(mysql:3306)/nightingale?charset=utf8mb4&parseTime=True&loc=Local"MaxOpenConns = 100MaxIdleConns = 10# Redis 配置[Redis]Addr = "redis:6379"Password = ""DB = 0# 时序数据库配置(这里使用 VictoriaMetrics)[TSDB]# 支持 prometheus、victoriametrics、m3db 等Type = "victoriametrics"# VictoriaMetrics 的 HTTP 地址Endpoint = "http://victoria-metrics:8428"# 告警引擎配置[Alert]# 启用告警Enable = true# 告警评估间隔(秒)EvalInterval = 10# 日志配置[Log]Dir = "/app/logs"Level = "info"EOF### 编写 webapi.conf前端配置相对简单,主要指定后端 API 地址和 Redis。bashcat > etc/webapi.conf << 'EOF'# 夜莺 Web API 配置文件[Base]# 服务器地址,这里使用容器内部通信ServerAddr = "http://n9e-server:19000"# 监听地址ListenAddr = ":18000"[Redis]Addr = "redis:6379"Password = ""DB = 1[Log]Dir = "/app/logs"Level = "info"EOF## 第三步:初始化数据库夜莺启动前需要初始化数据库表结构。我们可以使用夜莺官方提供的 SQL 脚本。如果你没有挂载初始化脚本,可以手动执行。这里我们通过 Docker 容器内的 mysql 客户端来操作。bash# 等待 MySQL 容器完全启动(约 30 秒)sleep 30# 从夜莺官方 GitHub 下载初始化 SQL# 注意:不同版本 SQL 可能不同,这里以 v7.0.1 为例wget https://raw.githubusercontent.com/ccfos/nightingale/main/sql/n9e_ams.sqlwget https://raw.githubusercontent.com/ccfos/nightingale/main/sql/n9e_hbs.sqlwget https://raw.githubusercontent.com/ccfos/nightingale/main/sql/n9e_rdb.sql# 复制到容器内执行docker cp n9e_ams.sql nightingale-mysql:/tmp/docker cp n9e_hbs.sql nightingale-mysql:/tmp/docker cp n9e_rdb.sql nightingale-mysql:/tmp/docker exec -i nightingale-mysql mysql -uroot -proot123 nightingale < /tmp/n9e_ams.sqldocker exec -i nightingale-mysql mysql -uroot -proot123 nightingale < /tmp/n9e_hbs.sqldocker exec -i nightingale-mysql mysql -uroot -proot123 nightingale < /tmp/n9e_rdb.sql## 第四步:启动夜莺一切准备就绪后,启动所有服务:bashdocker-compose up -d查看日志确认启动正常:bashdocker-compose logs -f n9e-server如果看到类似 HTTP server started on :19000 的日志,说明启动成功。然后访问 http://你的服务器IP:18000,应该能看到夜莺的登录界面。默认管理员账号:root,密码:root.2020(注意密码带点号)。## 注意事项(实战总结)### 1. 数据持久化- 所有数据库和时序数据都应挂载到宿主机目录(如 ./mysql-data),否则容器重启后数据会丢失。- 日志文件也要持久化,方便排查问题。### 2. 网络通信- 使用 Docker 自定义网络(nightingale-net)让容器间通过服务名通信,避免写死 IP。- 夜莺的 server.conf 中 DSN 和 Redis 地址必须使用服务名(如 mysql:3306),而不是 localhost。### 3. 版本兼容性- 夜莺 v7.0.1 需要 MySQL 8.0+,不要使用 MySQL 5.7,否则部分表结构会报错。- Redis 推荐使用 7.x,但 6.x 也可用。- VictoriaMetrics 版本要与夜莺兼容,建议使用最新 LTS 版本。### 4. 资源限制- 生产环境建议为每个容器设置 mem_limit,避免某个服务耗尽内存。- 例如在 docker-compose.yml 中添加: yaml n9e-server: mem_limit: 2g ### 5. 告警配置- 夜莺默认不启用告警通知,需要配置通知渠道(如邮件、钉钉、企业微信)。- 在 web 界面中,进入「告警管理」-「通知配置」进行设置。### 6. 监控数据采集- 夜莺本身不采集数据,需要配合 categraf(夜莺官方采集器)或 Prometheus 等 agent。- 可以在另一台机器或容器中运行 categraf,配置指向夜莺服务器的 pushgw 端口(通常是 19000)。## 完整部署脚本示例下面是一个一键部署的 Shell 脚本(假设你已经创建了 docker-compose.yml 和配置文件):bash#!/bin/bash# 一键部署夜莺监控 v7.0.1# 使用方法:bash deploy_n9e.shset -eecho "=== 开始部署夜莺监控 ==="# 1. 创建目录结构mkdir -p etc logs# 2. 写入配置文件(内容同上,略)# 实际使用时,建议将配置文件作为单独文件,这里仅作演示# 3. 拉取镜像docker-compose pull# 4. 启动服务docker-compose up -d# 5. 等待数据库就绪echo "等待 MySQL 就绪..."until docker exec nightingale-mysql mysqladmin ping -h localhost --silent; do sleep 2doneecho "MySQL 就绪"# 6. 初始化数据库echo "初始化数据库..."docker exec -i nightingale-mysql mysql -uroot -proot123 nightingale < sql/n9e_ams.sqldocker exec -i nightingale-mysql mysql -uroot -proot123 nightingale < sql/n9e_hbs.sqldocker exec -i nightingale-mysql mysql -uroot -proot123 nightingale < sql/n9e_rdb.sql# 7. 重启 server 使其加载新数据docker-compose restart n9e-serverecho "=== 部署完成 ==="echo "访问 http://localhost:18000 登录"echo "默认账号:root / root.2020"## 总结本文通过详细的代码示例,演示了如何使用 Docker Compose 部署夜莺开源监控系统。关键点包括:- 使用 Docker 容器化 MySQL、Redis、VictoriaMetrics 和夜莺本身。- 正确编写 server.conf 和 webapi.conf 配置文件,注意网络通信方式。- 手动执行数据库初始化 SQL,确保表结构完整。- 总结 6 条实战注意事项,涵盖数据持久化、版本兼容、资源限制等。在实际生产环境中,建议进一步配置告警通知、添加监控 agent(如 categraf),并考虑使用 Docker Swarm 或 Kubernetes 进行编排。夜莺作为国产开源监控的佼佼者,其灵活的架构和强大的告警能力,值得运维团队深入研究和应用。
更多推荐
所有评论(0)