clickhouse运维监控之ckman
一、ckman简介
通过网页端的可视化界面,ckman可以非常便捷的完成集群的导入、部署、节点的增删以及性能指标的监控等功能,可以大大简化集群部署的操作流程,从而起到事半功倍的效果。
二、ckman架构
ckman支持多中心部署,使用nacos进行配置同步,可以对多个集群进行管理,在集群的每个节点下,如果配置node_exporter,则可以对对应的节点进行指标监控。node_exporter的数据传给prometheus,然后在前端展示。
三、ckman编译
Linux & MacOS下编译
编译环境配置
1. 安装Node.js
由于ckman将前端代码静态嵌入到了server中,因此需要安装Node.js以编译前端代码:
MacOS上安装Node.js:
brew install node
Linux下安装Node.js:
yum install -y nodejs
安装完成后,在frontend目录下执行:
cd frontend sudo rm -rf node_modules package-lock.json && npm install
2. 安装pkger
go get github.com/markbates/pkger/cmd/pkger
3. 安装swag
go get -u github.com/swaggo/swag/cmd/swag
4. 安装 nfpm2.2.4
nfpm是一款用来打包rpm的工具,如果不打算做成rpm包,可以不安装。由于nfpm新版本配置文件和旧版本差别很大,建议安装指定的2.2.4版本。
wget -q https://github.com/goreleaser/nfpm/releases/download/v2.2.4/nfpm_2.2.4_Linux_x86_64.tar.gz tar -xzvf nfpm_2.2.4_Linux_x86_64.tar.gz cp nfpm /usr/local/bin
Linux和MacOS下编译命令都是一样的:
make package VERSION=x.x.x
VERSION是指定的版本号,如果不指定,则默认生成一个版本号为trunk的版本。
rpm编译
make rpm VERSION=x.x.x
make deb VERSION=x.x.x
鉴于编译环境的诸多依赖,配置起来可能比较麻烦,因此也提供了docker编译的方式,直接运行下面的命令即可:
make docker-build VERSION=x.x.x
如果想利用docker编译rpm版本,可以先进入docker环境,再编译:
make docker-sh make rpm VERSION=x.x.x
四、ckman安装部署
ckman部署分为rpm包安装和tar.gz包安装。其实只是提供的安装包不一样,实际安装还是一样的。
1.rpm安装
安装rpm安装直接使用命令安装即可:
rpm -ivh ckman-1.2.5.x86_64.rpm
安装完成后,在/etc/ckman目录下,会生成工作目录(日志和配置文件等都在该目录下)。
启动
rpm方式安装的ckman有两种启动方式:
方式一:
/usr/local/bin/ckman -c=/etc/ckman/conf/ckman.yaml -p=/run/ckman/ckman.pid -l=/var/log/ckman/ckman.log -d
方式二:
systemctl start ckman
2.tar.gz包安装
安装可以在任意目录进行安装。安装方式为直接解压安装包即可。
tar -xzvf ckman-1.5.0-201216-6b03a3a.Linux.x86_64.tar.gz
进入ckman的工作目录,执行:
cd ckman
bin/start
启动之后,在浏览器输入 http://localhost:8808 跳出如下类似界面,说明启动成功:
docker启动
从v1.2.7版本开始,ckman支持从docker镜像启动。启动命令如下所示:
docker run -itd -p 8808:8808 --restart unless-stopped --name ckman quay.io/housepower/ckman:latest
但是需要注意的是,搭建promethues和nacos并不属于ckman程序自身的范畴,因此,从容器启动ckman默认是关闭nacos的,且前台Overview监控不会正常显示。
如果想自己配置nacos和prometheus,可以进入容器自行配置。
3.ckman配置文件
ckman的配置文件在ckman 的工作目录下的conf/ckman.yml。一级选项 | 二级选项 | 默认值 | 说明 |
server | id | 1 | ckman集群id,同一个集群的ckman的id号配置必须不同 |
port | 8808 | ckman默认的http端口 | |
https | false | 是否支持https,默认为不支持 | |
pprof | true | 是否支持pprof监控,默认支持 | |
session_timeout | 3600 | 会话超时(token失效)时间,默认为1个小时 | |
publick_key | 接入擎创统一门户用来解析token的公钥 | ||
swagger_enable | false | 是否开启swagger文档,默认不开启 | |
log | level | INFO | 日志级别,默认为INFO |
max_count | 5 | 滚动日志数量 | |
max_size | 10 | 单个日志大小,默认为10M | |
max_age | 10 | 日志有效生命周期,默认为10天 | |
prometheus | hosts | 127.0.0.1:9090 | 普罗米修斯监控的ip和端口 |
timeout | 10 | 普罗米修斯的超时时间 | |
nacos | enabled | true | 是否开启nacos,默认为true |
hosts | 127.0.0.1 | nacos服务的ip | |
port | 8848 | nacos服务的端口 | |
user_name | nacos | 登录nacos的用户名 | |
password | 0192023A7BBD73250516F069DF18B500 | 登录nacos的密码 | |
namespace | 指定nacos的namespace,默认为DEFAULT | ||
group | DEFAULT_GROUP | 向nacos注册的服务所处的组 | |
data_id | ckman | 向nacos注册的服务名称、数据项名称 |
五、安装部署node_exporter和prometheus
1.下载安装包
cd /usr/local/src/ wget https://github.com/prometheus/prometheus/releases/download/v2.4.2/prometheus-2.4.2.linux-amd64.tar.gz wget https://github.com/prometheus/alertmanager/releases/download/v0.15.2/alertmanager-0.15.2.linux-amd64.tar.gz wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz
2.安装 Prometheus
创建 prometheus 用户。
groupadd prometheus
useradd -g prometheus -m -d /var/lib/prometheus -s /sbin/nologin prometheus
解压安装包。
tar xf prometheus-2.4.2.linux-amd64.tar.gz -C /usr/local/ cd /usr/local/ mv prometheus-2.4.2.linux-amd64/ prometheus
创建启动脚本:
vim /usr/lib/systemd/system/prometheus.service 添加如下内容: [Unit] Description=prometheus After=network.target [Service] Type=simple User=prometheus ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --storage.tsdb.retention=15d --log.level=info Restart=on-failure [Install] WantedBy=multi-user.target
3.安装 node_exporter
在 Prometheus 节点
和另一台节点
上分别安装 node_exporter。
tar xf node_exporter-0.16.0.linux-amd64.tar.gz -C /usr/local/ cd /usr/local/ mv node_exporter-0.16.0.linux-amd64/ node_exporter chown -R prometheus.prometheus node_exporter/
创建 node_exporter 启动脚本:
vim /usr/lib/systemd/system/node_exporter.service 添加如下内容: [Unit] Description=node_export Documentation=https://github.com/prometheus/node_exporter After=network.target [Service] Type=simple User=prometheus ExecStart=/usr/local/node_exporter/node_exporter Restart=on-failure [Install] WantedBy=multi-user.target
注意:node_exporter 的运行用户也是 prometheus 用户需要在每台节点上都创建该用户。
启动 node_exporter 服务:
systemctl enable node_exporter.service systemctl start node_exporter.service systemctl status node_exporter.service ss -tnl | grep 9100
六、配置 Prometheus 添加监控目标
cd /usr/local/prometheus vim prometheus.yml scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090','localhost:9100'] # 对本机node_exporter 监控 # 新添加的对其它node节点抓取数据 - job_name: '111.4' #重写了全局抓取间隔时间,由15秒重写成5秒。 scrape_interval: 5s static_configs: - targets: ['192.168.111.4:9100']
启动 Prometheus 服务:
chown -R prometheus.prometheus prometheus/ systemctl enable prometheus.service systemctl start prometheus.service systemctl status prometheus.service
注意
:要留意启动之前的目录权限更改,否则可能会在启动的时候报错"Unable to create data directory" err="mkdir data/: permission denied"
。
node_exporter和prometheus不一定要部署在同一台主机,在prometheus的配置文件中指定监控的node_exporter即可。
static_configs: - targets: ['localhost:9100']
prometheus和ckman不一定要配置在同一台主机,在ckman配置文件中指定prometheus的地址和端口即可。
prometheus: hosts: - 192.168.11.173:9090