prometheus学习

prometheus的系统结构是server+agent模式,prometheus自己是server,各种exporter就相当于agent,运行在各个被监控主机上,通过定时从server去pull各个exporter的metric,形成统计输出。

prometheus的docker-compose.yml

version: '3'
services:
        prometheus:
                image: prom/prometheus:latest
                container_name: prometheus
                volumes:
                        - ./prometheus:/etc/prometheus
                restart: always
                network_mode: 'host'

prometheus.yml添加对应的内容

  - job_name: 'testwork'
    static_configs:
    - targets: ['172.17.244.131:9100']

node-exporter

node-exporter的安装,官方推荐不要使用docker,个人还是给出docker-compose.yml

version: '3'
services:
        node-exporter:
                image: prom/node-exporter:latest
                container_name: node-exporter
                command:
                        - '--path.rootfs=/host'
                restart: always
                network_mode: 'host'
                pid: host
                volumes:
                        - '/:/host:ro,rslave'

mysqld-exporter

version: '3'
services:
        mysqld-exporter:
                image: prom/mysqld-exporter:latest
                container_name: mysqld-exporter
                volumes:
                        - ./.my.cnf:/home/.my.cnf
                ports:
                        - 9104:9104
                network_mode: 'host'

.my.cnf文件

[client]
user = xxx
password = xxx
host = xxx
port = xxx

grafana

version: '3'
services:
        grafana:
                image: grafana/grafana:latest
                container_name: grafana
                network_mode: 'host'

访问hostname:3000,进入grafana,import dashboard即可。

docker共享卷容器

创建卷

docker volume create data1
docker volume create data2

挂载卷

docker-compose.yml重点配置
注意顶级标签一定要写成这样:
volumes:
        data1:
            external: true #如果没有这句,就会自动创建以docker-compose.yml所在目录为名字的volumes,每个已有卷都要增加这句。
        data2:
            external: true
一个共享示例:
第一个docker-compose.yml
version: '3'
services:
    container1:
        image: busybox:latest
        volumes:
            - data1:/opt/data1
            - data2:/opt/data2
volumes:
    data1:
        external: true
    data2:
        external: true
第二个docker-compose.yml
version: '3'
services:
    container2:
        image: busybox:latest
        volumes:
            - data1:/opt/data1
            - data2:/opt/data2
volumes:
    data1:
        external: true
    data2:
        external: true

这样就实现了两个容器的数据共享