- 安装docker
我使用的是ubuntu系统安装。
通常我们安装都是在root用户下面的:
#1. 从普通用户切换到root用户。
sudo su
#2. 更新apt
apt-get update
#3. 使用命令来安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
可以用docker -v来测试docker是否安装成功。
#4. 然后可以随便拉取一个镜像来进行测试。
docker pull ubuntu
#5. 这个时候会提示你登录docker,你只需要进行docker的注册,然后就可以在这边进行登录了。
#6. 镜像源切换。通常docker默认使用的是国外的镜像,我们拉取镜像的时候很慢,这个时候需要切换到国内的一些可替代的镜像源。
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):
{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
更多的可以参考一下阿里云:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
- 安装prometheus
上面我们的docker已经安装好了,接下来就是安装prometheus。
- prometheus(普罗米修斯):天生为采集存储监控数据而生的时序数据库。prometheus通过各种Exporter采集到监控数据,然后存储进prometheus中,以供查询展示
- grafana:一个监控仪表系统。grafana的数据来源可以有很多(如:Prometheus、Graphite、OpenTSDB、InfluxDB、MySQL/PostgreSQL、Microsoft SQL Serve等等),其中用得最多的数据源是prometheus
注:prometheus也有自己的UI,不过功能没有grafana强大
- 使用命令来搜索prometheus:
docker search prometheus
- 我们拉取第一个:
docker pull bitnami/prometheus
查看刚才来去的镜像:
docker images
创建挂载目录以及文件(因为如果是默认利用拉取镜像的空间的话,在docker重启的时候可能出现数据丢失。
#/opt/prometheus/data目录,准备用来挂载放置prometheus的数据
#/opt/prometheus/config目录,准备用来放置prometheus的配置文件
#/opt/prometheus/rules目录,准备用来挂载放置prometheus的规则文件
mkdir -p /opt/prometheus/{data,config,rules}
#授权相关文件夹权限
chmod -R 777 /opt/prometheus/data
chmod -R 777 /opt/prometheus/config
chmod -R 777 /opt/prometheus/rules
- 准备文件:
# 配置文件
cat > /opt/prometheus/config/prometheus.yml << \EOF
global:
# 数据采集间隔
scrape_interval: 45s
# 告警检测间隔
evaluation_interval: 45s
# 告警规则
rule_files:
# 这里匹配指定目录下所有的.rules文件
- /prometheus/rules/*.rules
# 采集配置
scrape_configs:
# 采集项(prometheus)
- job_name: 'prometheus'
static_configs:
# prometheus自带了对自身的exporter监控程序,所以不需额外安装exporter就可配置采集项
- targets: ['localhost:9090']
EOF
# 查看一下配置文件
cat /opt/prometheus/
prometheus配置项说明
global:全局配置 (如果有内部单独设定,会覆盖这个参数)
alerting:告警插件定义。这里会设定alertmanager这个报警插件
rule_files:告警规则。 按照设定参数进行扫描加载,用于自定义报警规则,其报警媒介和route路由由alertmanager插件实现
scrape_configs:采集配置。配置数据源,包含分组job_name以及具体target。又分为静态配置和服务发现
remote_write:用于远程存储写配置
remote_read:用于远程读配置
- 启动容器
# 启动prometheus
# config.file:指定容器中,配置文件的位置
# web.enable-lifecycle:启动此项后,当配置文件发生变化后,可通过HTTP API 发送 post 请求到 /-/reload,实现热加载,如:curl -X POST http://47.105.39.189:9090/-/reload
# -v /etc/localtime:/etc/localtime:ro表示让容器使用宿主机的时间, :ro表示只读(注:此方式只针对宿主机和容器的时区文件均为/etc/localtime)
docker run --name prometheus -d \
-p 9090:9090 \
-v /etc/localtime:/etc/localtime:ro \
-v /opt/prometheus/data:/prometheus/data \
-v /opt/prometheus/config:/prometheus/config \
-v /opt/prometheus/rules:/prometheus/rules \
bitnami/prometheus --config.file=/prometheus/config/prometheus.yml --web.enable-lifecycle
- 测试并访问:
{ip}:9090来进行访问:
- 安装grafana
- 拉取镜像:
搜索grafana镜像:
docker search grafana
然后拉取第一个:
docker pull grafana/grafana
- 准备挂载文件
# /opt/grafana/data目录,准备用来挂载放置grafana的数据
# /opt/grafana/plugins目录,准备用来放置grafana的插件
# /opt/grafana/config目录,准备用来挂载放置grafana的配置文件
mkdir -p /opt/grafana/{data,plugins,config}
# 授权相关文件夹权限
chmod -R 777 /opt/grafana/data
chmod -R 777 /opt/grafana/plugins
chmod -R 777 /opt/grafana/config
如果这个时候我们想要grafana默认的模版的话(也就是默认的配置文件,当然你也可以自己手动创建一个类似的文文件的,我这里使用的是创建一个默认的方式)
这里的命令要一条一条的执行。
# 先临时启动一个容器
docker run --name grafana-tmp -d -p 3000:3000 grafana/grafana
# 将容器中默认的配置文件拷贝到宿主机上
docker cp grafana-tmp:/etc/grafana/grafana.ini /opt/grafana/config/grafana.ini
# 移除临时容器
docker stop grafana-tmp
docker rm grafana-tmp
# 修改配置文件(需要的话)
# vim /opt/grafana/config/grafana.ini
- 启动容器:
# 启动prometheus
# 环境变量GF_SECURITY_ADMIN_PASSWORD:指定admin的密码
# 环境变量GF_INSTALL_PLUGINS:指定启动时需要安装得插件
# grafana-clock-panel代表时间插件
# grafana-simple-json-datasource代表json数据源插件
# grafana-piechart-panel代表饼图插件
docker run -d \
-p 3000:3000 \
--name=grafana \
-v /etc/localtime:/etc/localtime:ro \
-v /opt/grafana/data:/var/lib/grafana \
-v /opt/grafana/plugins/:/var/lib/grafana/plugins \
-v /opt/grafana/config/grafana.ini:/etc/grafana/grafana.ini \
-e "GF_SECURITY_ADMIN_PASSWORD=admin" \
-e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel" \
grafana/grafana:
然后进行访问:{ip}:3000
- 倒入数据源
然后写入这个:
然后效果:
- 安装系统采集服务
- 安装采集服务:node-exporter
# 下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
# 解压
tar -xvf node_exporter-1.1.2.linux-amd64.tar.gz
cd node_exporter-1.1.2.linux-amd64
# 启动
nohup ./node_exporter --web.listen-address=":9100" &
访问:{ip}:9100
- 将数据采集到prometheus:
vim /opt/prometheus/config/prometheus.yml
global:
# 数据采集间隔
scrape_interval: 45s
# 告警检测间隔
evaluation_interval: 45s
# 告警规则
rule_files:
# 这里匹配指定目录下所有的.rules文件
- /prometheus/rules/*.rules
# 采集配置
scrape_configs:
# 采集项(prometheus)
- job_name: 'prometheus'
static_configs:
# prometheus自带了对自身的exporter监控程序,所以不需额外安装exporter就可配置采集项
- targets: ['localhost:9090']
- job_name: tenxun-node'
static_configs:
- targets: ['localhost:9100']
可以通过重启prometheus或者手动热加载:
# 前提条件:启动prometheus时,启用了web.enable-lifecycle
# 发送post请求到prometheus的/-/reload下触发热加载配置
curl -X POST http://47.105.39.189:9090/-/reload
# 重启的方式:
# 先用docker ps -a来查看prometheus的CONTAINER ID。
docker restart {CONTAINER ID}