各种环境的选型建议
- Docker compose 方式:可用于快速测试,不建议上生产,如果要生产环境使用 Docker compose,需要对 Docker compose 真的很熟,社区很多朋友遇到问题其实是因为对 Docker compose 不熟悉导致踩坑
- 二进制部署:这是最推荐的方式,systemd 托管,开机自启动,挂了自动拉起,也可以方便配置 CPU 限制,使用 journalctl 看日志,日志自动有滚动处理,稳,升级也方便,老运维应该深有同感
- Helm 方式:公司大规模使用了 Kubernetes,可以选择 Helm 方式,前提是贵司对 Helm 这套能 hold 住,通常情况下,我们不推荐把夜莺服务端部署到 Kubernetes 中,因为 Kubernetes 一旦挂了监控就挂了,而监控系统作为 P0 级服务,最好是尽量少的依赖其他组件。如果真的因为 Kubernetes 挂了导致监控挂,其他团队的人就容易来怼你当初为啥选择这样的部署方案
- 存储选型:如果之前没有部署过,是个新环境,时序库选型建议使用 VictoriaMetrics,单机版 VictoriaMetrics 就可以抗住每秒上百万数据点,性能很好,CPU、内存的占用都比 Prometheus 少,而且,完全兼容 Prometheus 的查询接口。社区也有人用 Thanos,Thanos 的架构明显比 VictoriaMetrics 要复杂,简单的东西不容易出问题
- 时间校准:社区反馈的很多问题都是因为机器时间没有校准,监控系统对时间很敏感,请各位先把机器时间校准一致,让服务端的机器、时序库的机器、要监控的目标机器、浏览器所在的机器(通常是你的笔记本电脑或台式机)时间,都保持一致
用户名密码
夜莺安装完成之后,默认用户是 root
,密码是 root.2020
。部署完成之后,建议立即修改密码。另外修改 etc/config.toml
中的 SigningKey 为随机字符串,用于加密 jwt token,当然,如果是 v7.0.0.beta5 以上版本,系统会自动生成一个随机字符串,不需要手动修改 SigningKey。另外,尽量不要把夜莺暴露在公网,防止其他安全隐患。
之前看扫描网站,有上千个夜莺公网站点,好消息是夜莺的用户挺多的,坏消息是很多暴露在公网的夜莺都没有修改默认的用户名和密码,实在是太危险了。尽量、尽量不要把夜莺暴露在公网。
执行部署
- 视频教程:夜莺监控系统部署视频教程,一定看一下
- Docker compose 方式部署
- 二进制方式部署,即便使用 Docker 方式部署,这个章节也要读!
- Helm 方式部署
以上方式部署完成,就完成了夜莺中心端的部署,适用于单机房的场景,或者是多机房但是相互之间有良好专线的公司。
如果贵司是多机房架构,且担心机房网络割裂问题(比如某个机房和其他机房之间专线中断),则可以采用边缘机房部署架构,除了中心端部署 n9e 进程,还需要在边缘机房部署 n9e-edge 进程。边缘机房部署架构参考《附:边缘机房部署》
二进制部署夜莺
可以去两个地方下载夜莺发布包,完事自行解压缩:
- github releases:更新会更频繁,国外地址,下载可能会慢一些
- flashcat 下载中心:更新会慢一些,国内地址,下载更快
注意:amd64.tar.gz 是 x86_64 架构的,arm64.tar.gz 是 arm64 架构的。根据自己的服务器架构选择下载。如果下载错了,启动的时候会报错:无法执行二进制文件。
V7 版本二进制下载地址:https://github.com/ccfos/nightingale/releases/download/v7.0.0/n9e-v7.0.0-linux-amd64.tar.gz
根据「项目介绍」中的架构介绍,夜莺依赖 MySQL、Redis,需要各位提前准备好。这里也提供一个小脚本来安装这两个组件,大家可以参考。
# 安装 mariadb
apt install -y mariadb*
systemctl enable mariadb
systemctl restart mariadb
# 设置密码为 1234admin
mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('1234admin');"
# 安装 redis
apt install -y redis
systemctl enable redis
systemctl restart redis
上例中 mysql 的 root 密码设置为了 1234admin
,测试阶段建议维持这个不变,后续就省去了修改配置文件的麻烦,等熟悉了上生产了再改为强密码。如果你想修改默认用户名和密码,就要对应的修改配置文件中的 mysql 连接信息,配置文件的哪个地方配置了 mysql 的密码呢?通过下面的命令可以找到:
# 夜莺的主配置文件是 etc/config.toml
grep "1234admin" etc/config.toml
夜莺配置文件中的 Redis 默认是配置的单机版,且无密码,如果想做调整,根据配置文件中的注释来修改即可。
解压安装
tar xf n9e-v7.0.0-linux-amd64.tar.gz
ll
total 139204
drwxr-xr-x 6 root root 4096 Aug 1 14:36 ./
drwx------ 7 root root 4096 Aug 1 14:34 ../
drwxr-xr-x 3 root root 4096 Aug 1 14:36 cli/
drwxr-xr-x 8 root root 4096 Aug 1 14:36 docker/
drwxr-xr-x 5 root root 4096 Aug 1 14:36 etc/
drwxr-xr-x 65 root root 4096 Aug 1 14:36 integrations/
-rwxr-xr-x 1 501 staff 40112128 Jul 26 13:59 n9e*
-rwxr-xr-x 1 501 staff 16736256 Jul 26 13:59 n9e-cli*
-rwxr-xr-x 1 501 staff 36622336 Jul 26 13:59 n9e-edge*
-rw------- 1 501 staff 70849 Jul 26 13:59 n9e.sql
导入数据库表结构
解压缩夜莺的 tar.gz 之后,可以看到 n9e.sql,这是数据库初始化 sql,需要导入到 mysql 中。
mysql -uroot -p1234admin < n9e.sql
启动夜莺
解压缩夜莺的 tar.gz 之后,可以看到三个二进制:
- n9e:这是夜莺的服务端二进制
- n9e-edge:这是边缘机房部署模式时使用,后面会讲,现在不用管
- n9e-cli:这是 v5 升级 v6 版本时使用的命令行迁移工具,新用户也无需关心
另外可以看到几个目录:
- cli:v5 升级 v6 的时候用的,新用户无需关心
- etc:配置文件目录
- docker:docker 部署的时候用的,相关配置文件,相关 compose.yaml 文件都在这里,二进制部署无需关心
- integrations:集成目录。存放内置告警规则、内置仪表盘
修改配置文件
vim etc/config.toml
# 官方默认密码为 1234 ,这里由于我修改为 1234admin,所以在配置将其修改
DSN = "root:1234admin@tcp(127.0.0.1:3306)/n9e_v6?charset=utf8mb4&parseTime=True&loc=Local&allowNativePasswords=true"
编辑 service文件
cat > /usr/lib/systemd/system/n9e.service <<EOF
[Unit]
Description=Nightinagle
[Service]
# 安装目录
WorkingDirectory=/root/n9e
ExecStart=/root/n9e/n9e
[Install]
WantedBy=multi-user.target
EOF
启动
systemctl enable --now n9e.service
systemctl status n9e.service
● n9e.service - Nightinagle
Loaded: loaded (/lib/systemd/system/n9e.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-08-01 14:44:54 CST; 3s ago
Main PID: 4249 (n9e)
Tasks: 6 (limit: 4513)
Memory: 23.6M
CPU: 1.655s
CGroup: /system.slice/n9e.service
└─4249 /root/n9e/n9e
Aug 01 14:44:54 n9e systemd[1]: Started Nightinagle.
Aug 01 14:44:54 n9e n9e[4249]: runner.cwd: /root/n9e
Aug 01 14:44:54 n9e n9e[4249]: runner.hostname: n9e
Aug 01 14:44:54 n9e n9e[4249]: runner.fd_limits: (soft=524288, hard=524288)
Aug 01 14:44:54 n9e n9e[4249]: runner.vm_limits: (soft=unlimited, hard=unlimited)
查看端口和进程
ss -ntl| grep 17000
LISTEN 0 4096 *:17000 *:*
# 进程
ps -ef|grep n9e
root 4249 1 8 14:44 ? 00:00:04 /root/n9e/n9e
root 4302 1453 0 14:45 pts/0 00:00:00 grep --color=auto n9e
查看日志
journalctl -fu n9e
把日志输出到指定目录(选做)
默认情况下夜莺的日志打印到 stdout,如果想把日志输出到指定目录,可以通过修改 config.toml
中的 [Log]
部分达成目的,比如:
[Log]
Dir = "logs"
Level = "INFO"
Output = "file"
KeepHours = 24
上面的配置表示,把日志输出到 logs 目录下,日志级别是 INFO,日志文件保留 24 小时。也可以根据大小来配置,比如:
[Log]
Dir = "logs"
Level = "INFO"
Output = "file"
RotateNum = 3
RotateSize = 256
上面的配置表示,把日志输出到 logs 目录下,日志级别是 INFO,日志文件大小超过 256M 时,会自动切割,保留 3 个日志文件。
访问夜莺
浏览器访问夜莺的端口,即 17000,默认用户是 root
,密码是 root.2020
以上就是夜莺部署过程