n9e 部署
# 三种部署方式
各种环境的选型建议:
- 如果想快速体验测试,可以使用 Docker compose 方式
- 最稳定的部署方式,建议使用二进制部署
- 公司大规模使用了 Kubernetes,可以选择 Helm 方式
- 小规模使用,比如 1000 台机器以下,用 Prometheus 做存储即可,超过 1000 台机器,选择 VictoriaMetrics 可能更合适
# 1. 二进制方式
安装依赖mysql/redis
# install mysql
yum -y install mariadb*
systemctl enable mariadb
systemctl restart mariadb
mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('1234');"
# install redis
yum install -y redis
systemctl enable redis
systemctl restart redis
2
3
4
5
6
7
8
9
10
安装n9e
mkdir -p /opt/n9e && cd /opt/n9e
# 可以去 https://github.com/ccfos/nightingale/releases 找最新版本的包,文档里的包地址可能已经不是最新的了
tarball=n9e-v6.0.0-ga.6-linux-amd64.tar.gz
urlpath=https://download.flashcat.cloud/${tarball}
wget $urlpath || exit 1
tar zxvf ${tarball}
mysql -uroot -p1234 < n9e.sql
# 临时启动
nohup ./n9e &> n9e.log &
# 或者使用systemd托管服务
cat n9e.service
[Unit]
Description="n9e"
After=network.target
[Service]
Type=simple
ExecStart=/opt/n9e/n9e
WorkingDirectory=/opt/n9e
Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=n9e
[Install]
WantedBy=multi-user.target
cp n9e.service /etc/systemd/system/
systemctl daemon-reload
systemctl start n9e
# check n9e
ps aux |grep n9e|grep -v grep
root 19880 0.2 0.5 729972 18952 pts/0 Sl 15:48 0:00 ./n9e
# 或者:
systemctl status n9e
# check port
netstat -anpt |grep 17000
tcp6 0 0 :::17000 :::* LISTEN 19880/./n9e
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
如果启动成功,n9e 默认会监听在 17000 端口。上面使用 nohup 简单演示,生产环境建议用 systemd 托管。
配置文件
etc/config.toml
中含有 mysql 的连接地址配置,如果连接数据库报错,可以检查一下用户名和密码。夜莺服务端部署好之后,浏览器访问 17000 就可以体验相关功能了,默认用户是
root
,密码是root.2020
,夜莺 v6 可以支持对接 Prometheus like、Elasticsearch、Jaeger 三种数据源,可以点击 系统信息-数据源 菜单,配置对应的数据源,即可在夜莺平台查看 metrics、logs、traces 的数据。
# 2. docker compose方式
使用Docker Compose一键启动夜莺,快速尝试。更多Docker Compose相关知识请参考Docker官网 (opens new window) 操作演示 (opens new window)
git clone https://gitlink.org.cn/ccfos/nightingale.git
cd nightingale/docker
# docker compose V2版本执行 docker compose up -d (https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command)
docker-compose up -d
# 正常会有以下输出
# Creating mysql ... done
# Creating redis ... done
# Creating prometheus ... done
# Creating ibex ... done
# Creating agentd ... done
# Creating n9e ... done
# Creating telegraf ... done
# docker compose V2版本执行 docker compose ps (https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command)
docker-compose ps
# 正常情况会有以下输出
# NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
# categraf flashcatcloud/categraf:latest "/entrypoint.sh" categraf 2 days ago Up 2 days
# ibex ulric2019/ibex:0.3 "sh -c '/wait && /ap…" ibex 2 days ago Up 2 days
# mysql mysql:5.7 "docker-entrypoint.s…" mysql 2 days ago Up 2 days
# n9e flashcatcloud/nightingale:latest "sh -c '/wait && /ap…" n9e 2 days ago Up 2 days
# prometheus prom/prometheus "/bin/prometheus --c…" prometheus 2 days ago Up 2 days
# redis redis:6.2 "docker-entrypoint.s…" redis 2 days ago Up 2 days
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
💡启动成功之后,建议把 initsql 目录下的内容挪走,这样下次重启的时候,DB 就不会重新初始化了。否则下次启动 mysql 还是会自动执行 initsql 下面的 sql 文件导致 DB 重新初始化,页面上创建的规则、大盘等都会丢失。Docker Compose 这种部署方式,只是用于简单测试,不推荐在生产环境使用,当然了,如果您是 Docker Compose 专家,另当别论"
服务启动之后,浏览器访问 n9e 的端口,即17000,默认用户是
root
,密码是root.2020
# 3. helm方式
Helm chart 由快猫团队维护,地址:https://github.com/flashcatcloud/n9e-helm 夜莺系统的默认用户是
root
,密码是root.2020
git clone https://github.com/flashcatcloud/n9e-helm.git
helm install nightingale ./n9e-helm -n n9e --create-namespace
2
配置chart
以下配置项可以在安装时通过
--set
传入 或者 直接编辑values.yaml
配置暴露夜莺服务的方式
- Ingress: k8s集群中必须已经安装了ingress controller
- ClusterIP: 通过集群的内部 cluster ip 暴露服务,选择该值时服务只能够在集群内部访问。
- NodePort: 通过每个节点上的 IP 和静态端口(NodePort)暴露服务。在集群外通过
NodeIP:NodePort
访问夜莺服务。- LoadBalancer: 使用云提供商的负载均衡器向外部暴露服务。
配置夜莺服务使用TLS
- enabled: 是否使用tls方式。如果
expose.type
为ingress
并且enabled
为false
时,记得删除expose.ingress.annotations中的ssl-redirect annotations。- certSource: TLS证书来源。 可选项为
- auto: 自动生成TLS证书。
- commonName: 用于生成证书的CN, 如果
expose.type
不是ingress
, 此项必须填写。- secret: 从特定的secret中读取证书信息。TLS证书可以手动生成,或通过cert manager生成。
- secretName: secret的名字,必须包含以下两个key的内容
- tls.crt: 证书内容
- tls.key: 私钥内容
- none: 不使用TLS证书(ingress模式)。 如果 ingress controller配置了默认的TLS证书, 使用此选项。
配置external URL
external URL主要用于访问夜莺web服务
格式:
protocol://domain[:port]
。 通常:
- 如果通过
Ingress
暴露服务,domain
应该配置为expose.ingress.hosts.web
- 如果通过
ClusterIP
暴露服务,domain
应该配置为expose.clusterIP.name
- 如果通过
NodePort
暴露服务,domain
应该配置为 k8s 集群内node的IP- 如果通过
LoadBalancer
暴露服务,domain
应该配置为从云提供商那里获取到的域名的CNAME(自有域名作为提供商域名的cname)注意:
- 如果夜莺部署在proxy之后,那
domain
设置为proxy的URL- 夜莺web服务的初始用户名为
root
,初始密码为root.2020
配置持久化存储
Disable: 关闭持久存储,pod生命周期结束后,数据消失。
Persistent Volume Claim(default): 需要设置
StorageClass
以便k8s提供动态卷支持。 如果已有持久卷, 就配置到existingClaim
我用的是阿里云nas storageclass,设置参数:
storageClass: "nas-sc"
卸载
卸载/删除
nightingale
:helm uninstall nightingale -n n9e
1