夜莺初识
中心汇聚式部署方案
这种方案就是建立一个 N9e 集群,其他 region 的监控数据都往这一个集群发送数据,这要求中心集群和其他 region 要有很好的网络连接。
对于中心集群来说,主要包括以下组件:
- MySQL:用于存放配置信息以及告警事件。
- Redis:用于存储 JWT Token,机器元信息等数据。
- TSDB:时序数据库,存放监控指标。
- N9e:核心服务,处理 Web 请求、提供告警引擎。
- LB:为多个 N9e 提供负载功能。
n9e 提供的是 HTTP 接口,前面负载均衡可以是 4 层的,也可以是 7 层的。一般就选用 Nginx 就可以了。
对于其他 Region,只需要部署 Categraf 即可,它会将本地的监控数据推送到中心集群。
所有机房的 agent( 比如 Categraf、Telegraf、 Grafana-agent、Datadog-agent ),都直接推数据给 n9e,这个架构最为简单,维护成本比最低。前提是要求机房之间的网络链路要比较好,如果网络不好就要用下面的方案了。
边缘下沉式混杂部署方案
这个图尝试解释 3 种不同的情形,比如 A 机房和中心网络链路很好,Categraf 可以直接汇报数据给中心 n9e 模块,另一个机房网络链路不好,就需要把时序库下沉部署,时序库下沉了,对应的告警引擎和转发网关也都要跟随下沉,这样数据不会跨机房传输,比较稳定。但是心跳还是需要往中心心跳,要不然在对象列表里看不到机器的 CPU、内存使用率。还有的时候,可能是接入的一个已有的 Prometheus,数据采集没有走 Categraf,那此时只需要把 Prometheus 作为数据源接入夜莺即可,可以在夜莺里看图、配告警规则,但是就是在对象列表里看不到,也不能使用告警自愈的功能,问题也不大,核心功能都不受影响。
边缘机房,下沉部署时序库、告警引擎、转发网关的时候,要注意,告警引擎需要依赖数据库,因为要同步告警规则,转发网关也要依赖数据库,因为要注册对象到数据库里去,需要打通相关网络,告警引擎和转发网关都不用Redis,所以无需为Redis打通网络。
1 单机部署
1.1 安装MySQL
## 卸载主机自带的mysql
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
## 下载mysql 安装包
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
## 安装mysql
tar xf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.32-linux-glibc2.12-x86_64 /data/mysql
# 创建mysql socket 目录
mkdir /var/lib/mysql
# 创建mysql data数据及log日志目录
mkdir /data/mysql/{data,log}
# 配置mysql 环境变量
cat /etc/profile.d/mysql.sh
PATH=/data/mysql/bin:$PATH
## 创建mysql用户与组,目录授权
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /var/lib/mysql
## 配置参数文件
# cat my.cnf
[mysql]
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
[mysqld]
port = 3306
socket=/var/lib/mysql/mysql.sock
basedir=/data/mysql
character-set-server=utf8mb4
default-storage-engine=INNODB
max_allowed_packet=16M
max_connections=400
explicit_defaults_for_timestamp = 1
sort_buffer_size = 32M
join_buffer_size = 128M
tmp_table_size = 64M
wait_timeout = 1800
read_buffer_size = 16M
read_rnd_buffer_size = 32M
skip_name_resolve = 1
table_open_cache=2000
thread_cache_size=768
myisam_max_sort_file_size=10G
myisam_sort_buffer_size=135M
key_buffer_size=32M
read_buffer_size=8M
read_rnd_buffer_size=4M
back_log=1024
open_files_limit=65536
table_definition_cache=1400
########log settings########
log-output=FILE
general_log = 0
general_log_file=/data/mysql/log/pss-general.err
slow_query_log = ON
slow_query_log_file=/data/mysql/log/pss-query.err
long_query_time=10
log-error=/data/mysql/log/pss-error.err
expire_logs_days = 30
default-authentication-plugin=mysql_native_password
#default_authentication_plugin=caching_sha2_password
#skip-grant-tables
innodb_buffer_pool_size = 1024M # 设置内存的50%~70%
innodb_buffer_pool_instances = 4 # 根据CPU 核心数设置
innodb_redo_log_capacity = 400M
innodb_file_per_table = 1
innodb_io_capacity = 10000
innodb_io_capacity_max = 20000
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 2000
innodb_lock_wait_timeout = 5
innodb_log_buffer_size = 16M
## mysql 数据库初始化
/data/mysql/bin/mysqld --initialize --user=mysql --basedir=/data/mysql/ --datadir=/data/mysql/data/
# 查看初始化密码
tail -f /data/mysql/log/pss-error.err
2023-06-07T10:35:42.120459Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: uoy9akYALw&p
## 配置mysql 启停脚本
cat > /usr/lib/systemd/system/mysqld.service << EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
ExecStart=/data/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 65536
LimitNPROC = 65536
[Install]
WantedBy=multi-user.target
EOF
# 启动mysql
systemctl enable mysqld.service --now
systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2023-02-24 14:28:14 CST; 7s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 10593 (mysqld)
Tasks: 39
Memory: 760.5M
CGroup: /system.slice/mysqld.service
└─10593 /data/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Feb 24 14:28:14 nhk_2c_01 systemd[1]: Started MySQL Server.
# 修改root 密码
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
# 允许root远程登录
create user 'root'@'%' identified with mysql_native_password BY '123456';
grant all privileges on *.* to 'root'@'%' with grant option;
1.2 安装 Redis
wget https://download.redis.io/releases/redis-5.0.14.tar.gz
# 安装依赖
$ yum install -y gcc gcc-c++
# 解压
tar zxf redis-5.0.14.tar.gz
# 编译指定路径安装
cd redis-5.0.14
make MALLOC=jemalloc
make PREFIX=/data/redis install
# 创建配置文件目录并拷贝redis配置文件
mkdir /data/redis/{conf,logs,data}
cd /data/redis/conf && cp /usr/local/src/redis-5.0.14/redis.conf .
# 编辑redis配置文件
sed -i "s#^bind 127.0.0.1#bind 0.0.0.0#g" redis.conf
sed -i 's#^logfile ""#logfile "/data/redis/logs/redis.log"#g' redis.conf
sed -i "s#^dir ./#dir /data/redis/data/#g" redis.conf
# 配置启动脚本
cat > /usr/lib/systemd/system/redis.service << EOF
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/data/redis/bin/redis-server /data/redis/conf/redis.conf --daemonize no
ExecStop=/data/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install]
WantedBy=multi-user.target
EOF
# 启动redis
systemctl enable redis.service --now
1.3 安装 TSDB
N9e 的 TSDB 有多种选择:
- Prometheus
- M3DB
- VictoriaMetrics
- InfluxDB
- Thanos
这里选择的是 VictoriaMetrics
# 下载vm单机 二进制包
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.91.2/victoria-metrics-linux-amd64-v1.91.2.tar.gz
# 创建vm数据存储目录
mkdir -p /data/vm/victoria
tar zxf victoria-metrics-linux-amd64-v1.91.2.tar.gz -C /data/vm/
chown root:root /data/vm/victoria-metrics-prod
# 配置启动脚本
cat > /usr/lib/systemd/system/victoria-metrics.service << EOF
[Unit]
Description=For Victoria-metrics Service
After=network.target
[Service]
ExecStart=/data/vm/victoria-metrics-prod -httpListenAddr=0.0.0.0:8428 -storageDataPath=/data/vm/victoria
[Install]
WantedBy=multi-user.target
EOF
## 参数:
-httpListenAddr=0.0.0.0:8428 #监听地址及端口
-storageDataPath #VictoriaMetrics 将所有数据存储在此目录中, 默认为执行启动 victoria 的当前目录下的 victoria-metrics-data 目录中。
-retentionPeriod #存储数据的保留, 较旧的数据会自动删除, 默认保留期为 1 个月, 默认单位为 m(月),支持的单位有 h (hour), d (day), w (week), y (year)。
# 启动
systemctl enable victoria-metrics.service --now
1.4 安装 N9e
下载最新版本的二进制包
wget https://download.flashcat.cloud/n9e-v6.0.0-ga.9.2-linux-amd64.tar.gz
mkdir /data/n9e/
tar zxf n9e-v6.0.0-ga.9.2-linux-amd64.tar.gz -C /data/n9e/
ll
total 70332
drwxr-xr-x 3 root root 35 Jun 7 19:27 cli
drwxr-xr-x 8 root root 253 Jun 7 19:27 docker
drwxr-xr-x 5 root root 103 Jun 7 19:27 etc
drwxr-xr-x 27 root root 4096 Jun 7 19:27 integrations
-rwxr-xr-x 1 1001 123 34840576 Jun 2 13:16 n9e
-rwxr-xr-x 1 1001 123 15224832 Jun 2 13:16 n9e-cli
-rwxr-xr-x 1 1001 123 21917696 Jun 2 13:16 n9e-edge
-rw-r--r-- 1 1001 123 29877 Jun 2 13:14 n9e.sql
## 导入 N9e 的数据库
mysql -uroot -p < n9e.sql
# 修改 n9e etc/config.toml 配置文件,修改添加数据源vm 配置
[root@localhost n9e]# ls etc/config.toml
etc/config.toml
[DB]
# postgres: host=%s port=%s user=%s dbname=%s password=%s sslmode=%s
DSN="root:123456@tcp(192.168.1.219:3306)/n9e_v6?charset=utf8mb4&parseTime=True&loc=Local&allowNativePasswords=true"
[Redis]
# address, ip:port or ip1:port,ip2:port for cluster and sentinel(SentinelAddrs)
Address = "192.168.1.219:6379"
[[Pushgw.Writers]]
# Url = "http://127.0.0.1:8480/insert/0/prometheus/api/v1/write"
Url = "http://192.168.1.219:8428/api/v1/write"
# 启动 n9e 服务
nohup ./n9e &>n9e.log &
netstat -lntp|grep 17000
tcp6 0 0 :::17000 :::* LISTEN 7431/./n9e
在浏览器输入http://192.168.1.219:17000,然后输入用户名root,密码root.2020即可登录系统。
1.5 安装 Categraf
Categraf 是一个监控采集 Agent,会将采集到的信息推送到 TSDB
wget https://download.flashcat.cloud/categraf-v0.3.11-linux-amd64.tar.gz
tar zxf categraf-v0.3.11-linux-amd64.tar.gz -C /data
cd /data && mv categraf-v0.3.11-linux-amd64 categraf
# 修改 categraf conf/config.toml 配置文件,如下
[root@localhost categraf]# ls conf/config.toml
conf/config.toml
[[writers]]
url = "http://192.168.1.219:17000/prometheus/v1/write"
# n9e 地址
[heartbeat]
enable = true
# report os version cpu.util mem.util metadata
url = "http://192.168.1.219:17000/v1/n9e/heartbeat"
## 测试启动
./categraf --test --debug
## 启动
nohup ./categraf &>categraf.log &
[root@localhost categraf]# ps aux|grep categraf
root 8417 0.5 1.2 834548 50052 pts/0 Sl 22:10 0:00 ./categraf
[root@localhost categraf]# tail -f categraf.log
2023/06/07 22:10:46 metrics_agent.go:273: I! input: local.net started
2023/06/07 22:10:46 metrics_agent.go:273: I! input: local.netstat started
2023/06/07 22:10:46 metrics_agent.go:273: I! input: local.nfsclient started
2023/06/07 22:10:46 metrics_agent.go:213: E! input: local.oracle not supported
2023/06/07 22:10:46 metrics_agent.go:273: I! input: local.processes started
2023/06/07 22:10:46 metrics_agent.go:273: I! input: local.self_metrics started
2023/06/07 22:10:46 metrics_agent.go:273: I! input: local.sockstat started
2023/06/07 22:10:46 metrics_agent.go:273: I! input: local.system started
2023/06/07 22:10:46 agent.go:47: I! [*agent.MetricsAgent] started
2023/06/07 22:10:46 agent.go:50: I! agent started
然后回到网页 查看基础设施
此时如果查看时序数据指标,查不到任何数据。是因为未添加数据源
1.6 添加数据源
系统配置 --> 数据源管理 --> Prometheus Like 添加
http://192.168.1.219:8428 是时序数据库VM地址
然后就能查看时序数据指标了
也可以通过内置的仪表盘查看主机的监控数据
1 条评论
大佬NB!