prometheus部署记录

313 阅读3分钟

prometheus部署记录


服务器环境

Centos 7.8

Docker version 19.03.8

influxdb 1.8.10

开放端口

  • Port 9090 : prometheus (Prometheus Server)
  • Port 9100 : node-exporter (物理服务器指标,如 CPU、内存、网络等)
  • Port 3000 : grafana (使用 Grafana 显示监控对象指标数据)
  • Port 8086 : influxdb (prometheus 数据存储)

1. InfluxDB 部署安装

使用 Docker 安装 influxdb 1.8

拉取官方镜像(我们这里选择 8.0.26,如果不写后面的版本号则会自动拉取最新版):

docker pull influxdb:1.8.10

启动镜像,创建配置文件:

$ docker run --rm influxdb:1.8.10 influxd config | sudo tee /home/influxdb/config/influxdb.conf > /dev/null

influxd config 命令将在标准输出上打印完整的 InfluxDB 配置文件,由于设置了–rm 选项,Docker 将运行一个容器来执行此命令,并且容器将在退出时立即删除。

它将被重定向到我们的 InfluxDB 配置文件,而不是将配置文件打印在标准输出上。

接下来,为新创建的文件重新分配文件夹权限,否则您的容器将无法与其正确交互。

chown -R 777 /home/influxdb/*

启动 influxdb,挂载配置文件,数据持久化到宿主主机

docker run -p 8086:8086 \
	--name influxdb \
	--restart unless-stopped \
	-e DOCKER_INFLUXDB_INIT_USERNAME=admin \
	-e DOCKER_INFLUXDB_INIT_PASSWORD=admin@123 \
    -v /home/influxdb/data:/var/lib/influxdb \
    -v /home/influxdb/config/influxdb.conf:/etc/influxdb/influxdb.conf \
    -v /etc/localtime:/etc/localtime \
    -d influxdb:1.8

参数说明:

  • --restart unless-stopped:设置开机后自动重启容器
  • -p 8086:8086:将容器的 8086 端口映射到主机的 8086 端口
  • -v /home/influxdb/config/influxdb.conf:/etc/influxdb/influxdb.conf:将配置文件挂在到主机
  • -v /home/influxdb/data:/var/lib/influxdb:将数据文件夹挂载到主机
  • -v /etc/localtime:/etc/localtime:容器时区与宿主机同步
  • -e DOCKER_INFLUXDB_INIT_USERNAME=admin:初始化管理员用户
  • -e DOCKER_INFLUXDB_INIT_PASSWORD=admin@123:初始化管理员用户密码
  • -d influxdb:1.8.10 : 后台启动

进入 docker 本地连接 influxdb 客户端:

$ docker exec -it influxdb bash
root@f492a203a1f1:/# influx    

Connected to http://localhost:8086 version 1.8.6
InfluxDB shell version: 1.8.6

> auth

username: admin
password: 

> show databases;

name: databases
name
----
_internal

> SHOW USERS
user  admin
----  -----
admin true

创建admin用户

# 设置root用户,并设置带上所有权限 密码用单引号
> create user "admin" with password 'admin@123' with all privileges
> 
# 发现admin权限为true了,那么admin的用户就创建好了。
> show users
user admin
---- -----
root true
>

创建prometheus库

$ docker exec -it influxdb bash
root@f492a203a1f1:/# influx

>CREATE DATABASE prometheus

在配置文件中启用 HTTP 身份验证

为此,请退出您的容器,然后前往您为 InfluxDB 创建的配置文件夹。

[http]
  enabled = true
  bind-address = ":8086"
  auth-enabled = true

保存文件并重新启动容器以应用更改。

$ docker restart influxdb

测试

测试 InfluxDB 容器

为了测试您的 InfluxDB 容器是否正确运行,您可以检查 HTTP API 是否已正确启用。

如果不指定正确的凭据,您应该无法执行查询。

$ curl -G http://localhost:8086/query --data-urlencode "q=SHOW DATABASES"
{"error":"unable to parse authentication credentials"}

身份验证已正确启用。

让我们尝试使用正确的凭据再次执行 InfluxQL 查询。

$ curl -G -u admin:admin@123 http://localhost:8086/query --data-urlencode "q=SHOW DATABASES"
{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"]]}]}]}

使用此 curl 命令,我们确保为 InfluxDB 服务器正确设置了凭据

2. node-exporter 部署安装

映射目标服务器响应的状态文件,用于收集服务器 CPU、内存、网络等指标

  1. 拉取镜像:docker pull prom/node-exporter
  2. 创建启动容器
    docker run -d -p 9100:9100 --name node-exporter   -v "/proc:/host/proc:ro"    -v "/sys:/host/sys:ro"   -v "/:/rootfs:ro"  --net="host"   prom/node-exporter
    
  3. 访问url: http://localhost:9100/metrics 测试效果

3. prometheus 部署安装

搭建prometheus的docker操作步骤

  1. 拉取prom/prometheus镜像: docker pull prom/prometheus
  2. 创建prometheus目录,新增prometheus.yml文件,用于指定设置docker地址:mkdir -p /home/prometheus、vi /home/prometheus/prometheus.yml
  3. 创建prometheus容器,指定端口、名称、挂载目录、设置时区:
    • -v /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml ##挂在配置文件
    • -v /home/prometheus/groups/:/usr/local/prometheus/groups/ ## 挂载动态配置文件

采用 file_sd_configs 方式,将 targets 以 Json 或 Yaml 方式写入特定文件中,那么只要文件发生变化,Prometheus 就会自动加载,是不是很方便啦!

docker run -itd --name prometheus -p 9090:9090 -v /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /home/prometheus/groups/:/usr/local/prometheus/groups/ -v /etc/localtime:/etc/localtime:ro   prom/prometheus

配置文件解释

# my global config
global:
  # 默认情况下,每15s拉取一次目标采样点数据。
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  # 每15秒评估一次规则。默认值为每1分钟。
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # job名称会增加到拉取到的所有采样点上,同时还有一个instance目标服务的host:port标签也会增加到采样点上
  - job_name: 'prometheus'
    # 覆盖global的采样点,拉取时间间隔5s
    scrape_interval: 5s
    static_configs:
    - targets: ['localhost:9090']
    
  - job_name: 'node-exporter'
   file_sd_configs:
     - files: ['/usr/local/prometheus/groups/nodegroups/*.json']



4. Grafana 部署安装

  1. 拉取镜像: docker pull grafana/grafana
  2. 启动容器: docker run -d --name grafana -p 3000:3000 grafana/grafana