其他分享
首页 > 其他分享> > docker-compose 安装基于telegraf + influxdb + grafana监控系统

docker-compose 安装基于telegraf + influxdb + grafana监控系统

作者:互联网

docker-compose 安装基于telegraf + influxdb + grafana监控系统


docker-compose.yml

version: '3.7'

services:
  influxdb:
    image: influxdb
    container_name: influxdb
    restart: always
    environment:
      - PRE_CREATE_DB=telegraf
      - ADMIN_USER="telegraf"
      - INFLUXDB_INIT_PWD="telegraf123"
      - GOGC=10
      - INFLUXDB_DATA_INDEX_VERSION=tsi1
    ports:
      - "8186:8086"
    expose:
      - "8090"
      - "8099"
    volumes:
      - "./influxdb/db:/var/lib/influxdb"
    networks:
      - monitor

  grafana:
    image: grafana/grafana
    container_name: grafana
    restart: always
    ports:
      - "3000:3000"
    environment:
      - HTTP_USER=admin
      - HTTP_PASS=admin
      - INFLUXDB_HOST=influxdb
      - INFLUXDB_PORT=8186
      - INFLUXDB_NAME=telegraf
      - INFLUXDB_USER=root
      - INFLUXDB_PASS=root
    volumes:
      - "./grafana:/var/lib/grafana"
    networks:
      - monitor
    depends_on:
      - "influxdb"

  telegraf:
    image: telegraf
    container_name: telegraf
    restart: always
    volumes:
      - ./telegraf:/etc/telegraf
      - /sys:/rootfs/sys:ro
      - /proc:/rootfs/proc:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - 'HOST_PROC=/rootfs/proc'
      - 'HOST_SYS=/rootfs/sys'
      - /etc/localtime:/etc/localtime:ro
    networks:
      - monitor
    depends_on:
      - influxdb
networks:
  monitor:

telegraf

核心概念

Telegraf工作原理大概是这样:定时去执行输入插件收集数据,数据经过处理插件和聚合插件,批量输出到数据存储。

数据指标(Metrics)

插件(Plugins)

Telegraf有四种类型的插件:

配置

全局tag

[global_tags]
  # dc = "us-east-1" # will tag all metrics with dc=us-east-1
  # rack = "1a"
  ## Environment variables can be used as tags, and throughout the config file
  # user = "$USER"

代理

[agent]
  ## 数据收集周期
  interval = "10s"
  ## 如果 interval="10s"  :00, :10, :20 依次进行收集
  round_interval = true

  ## 输出大小
  metric_batch_size = 1000

  ## 缓存大小
  metric_buffer_limit = 10000

  ## 接收插件休眠周期
  collection_jitter = "0s"

  ## 数据flush周期
  flush_interval = "10s"
  ## 发送插件休眠周期
  flush_jitter = "0s"

  
  ## 支持的时间单位 "ns", "us" (or "µs"), "ms", "s".
  precision = "s"


  ## 调试模式
  debug = false
  ## 静默模式
  quiet = false
  ## 日志路径
  logfile = ""

  ## 主机名,默认 os.Hostname()
  hostname = ""
  ## 如果设置为true,tag中将没有host信息
  omit_hostname = false

输出插件 (非常多以influxdb为例)

处理插件

  1. 数值类型转换
  2. 枚举类型
  3. 字符串转换
  4. topN

聚合插件

  1. 直方图
  2. 最大最小值

输入插件

生成配置文件

测试是否配置成功

# 测试 /etc/telegraf/telegraf.conf 配置文件中输入 cpu 配置是否正确
telegraf  -config /etc/telegraf/telegraf.conf -input-filter cpu -test
# 测试 /etc/telegraf/telegraf.conf 输出 influxdb 配置是否正确
telegraf  -config /etc/telegraf/telegraf.conf -output-filter influxdb -test
# 测试 /etc/telegraf/telegraf.d/mysql.conf 输入 cpu 和 输出 influxdb 配置是否正确
telegraf  -config /etc/telegraf/telegraf.d/mysql.conf -input-filter cpu  -output-filter influxdb -test

重启 telegraf

# 重启 telegraf 服务,使配置文件生效
service telegraf restart
# Linux 不同系统服务的启动方式不同
systemctl start telegraf

配置多个配置文件示例

# 例子:配置 os 和 redis 采集的配置文件
# 配置 os
cd /etc/telegraf
# 1.生成配置文件(将配置文件权限更改为777,以免出现报错) docker安装的可以进容器内部对应目录生成
telegraf config > telegraf.conf
chmod 777 telegraf.conf
# 2.在指定配置文件中添加输入输出插件相关的配置
telegraf --input-filter cpu:mem:disk:diskio:net --output-filter influxdb config > telegraf.conf
# 3.修改配置文件内容
vim telegraf.conf
# 4.<配置多个配置文件> 如,配置 redis 
cd /etc/telegraf/telegraf.d
telegraf config > redis.conf
chmod 777 telegraf.conf
telegraf --input-filter redis --output-filter influxdb config > redis.conf 
vim redis.conf
# 5.测试配置文件是否配置正确
telegraf -config redis.conf --input-filter redis --output-filter opentsdb:influxdb -test
# 6.重启 telegraf
service telegraf restart

influxdb

展示所有策略

# duration--持续时间,0代表无限制
# shardGroupDuration 代表的是多长时间的数据放在同一个数据文件中
# 实际过期是按照数据文件为单位过期的, 比如上面的配置下一个数据文件中会含有2018-1-1 0:0:0 ~ 2018-1-1 23:59:59的# 数据,这个时间文件的过期时间就为2018-1-1 23:59:59+168h
# replicaN--全称是REPLICATION,副本个数
# default--是否是默认策略

> SHOW RETENTION POLICIES ON telegraf
name    duration    shardGroupDuration    replicaN    default
default    0        168h0m0s        1        true

官方推荐数据分片时间

Retention Policy’s DURATIONShard Group Duration
< 2 days1 hour
>= 2 days and <= 6 months1 day
> 6 months7 days

show shards 命令显示当前是所有shared数据文件和他们的过期时间

> show shards
name: _internal
id database  retention_policy shard_group start_time           end_time             expiry_time       
-- --------  ---------------- ----------- ----------           --------             -----------       
6  _internal monitor          6           2018-05-19T00:00:00Z 2018-05-20T00:00:00Z 2018-05-27T00:00:00Z 
7  _internal monitor          7           2018-05-20T00:00:00Z 2018-05-21T00:00:00Z 2018-05-28T00:00:00Z 
8  _internal monitor          8           2018-05-21T00:00:00Z 2018-05-22T00:00:00Z 2018-05-29T00:00:00Z 
10 _internal monitor          10          2018-05-22T00:00:00Z 2018-05-23T00:00:00Z 2018-05-30T00:00:00Z 
11 _internal monitor          11          2018-05-23T00:00:00Z 2018-05-24T00:00:00Z 2018-05-31T00:00:00Z 
14 _internal monitor          14          2018-05-24T00:00:00Z 2018-05-25T00:00:00Z 2018-06-01T00:00:00Z 
15 _internal monitor          15          2018-05-25T00:00:00Z 2018-05-26T00:00:00Z 2018-06-02T00:00:00Z 
16 _internal monitor          16          2018-05-26T00:00:00Z 2018-05-27T00:00:00Z 2018-06-03T00:00:00Z 

创建数据过期策略

# '2_hours' 为策略名称   'telegraf'为数据库名称 DEFAULT 修改为默认策略
# 注意:新创建了一个默认策略后所有的查询和插入默认是操作的新策略下的数据, 如果不指定策略查询会查询不到老数据
> CREATE RETENTION POLICY "1_month" ON "telegraf" DURATION 30d REPLICATION 1 DEFAULT
> SHOW RETENTION POLICIES ON telegraf
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        false
1_month 720h0m0s 24h0m0s            1        true

# 创建一个数据保存1年的策略
# create retention policy "1Y" on test duration 366d replication 1

# 为库exceptionless创建了一个名称为3_day的策略,其中数据保存时间为3天,SHARDDURATION为3h
# CREATE RETENTION POLICY "3_day" ON "telegraf" DURATION 3d REPLICATION 1 SHARD DURATION 3h DEFAULT;

修改策略

> ALTER RETENTION POLICY "2_hours" ON "telegraf" DURATION 4h DEFAULT
> show retention POLICIES on telegraf
name    duration    shardGroupDuration    replicaN    default
default    0        168h0m0s        1        false
2_hours    4h0m0s        1h0m0s            1        true

删除策略

> drop retention POLICY "autogen" ON "telegraf"
> show retention POLICIES on telegraf
name    duration    shardGroupDuration    replicaN    default
default    0        168h0m0s        1        false

单独设置的过期策略 查询数据的时候要带上策略名

# 1_month 非默认策略的情况下下  查询 1_month 策略下的cpu表数据
select * from "1_month".cpu

备份数据库

# 备份所有的数据库
influxd backup -portable /tmp/data/total

# 备份指定数据库
influxd backup -portable -database yhhblog /tmp/data/yhhblog

# 备份数据库中指定时间段的数据
influxd backup -portable -database yhhblog -start 2018-07-27T2:31:57Z -end 2018-07-27T2:32:59Z  /tmp/data/yhhblog_per

恢复数据库

命令

influxd restore 
    [ -db <db_name> ]       --> 待恢复的数据库(备份中的数据库名)
    -portable | -online
    [ -host <host:port> ]    --> influxdb 的服务器
    [ -newdb <newdb_name> ]  --> 恢复到influxdb中的数据库名
    [ -rp <rp_name> ]        --> 备份中的保留策略
    [ -newrp <newrp_name> ]  --> 恢复的保留策略
    [ -shard <shard_ID> ]
    <path-to-backup-files>

例子

# 恢复到不存在的database
> influxd restore -portable -db yhhblog -newdb yhhblog_bk yhhblog_per

# 恢复到存在的DB
# 1. 首先是将备份恢复到一个不存在的数据库 yhhblog_bk 中
> influxd restore -portable -db yhhblog -newdb yhhblog_bk yhhblog_per

# 2. 准备 yhhblogNew 数据库
> create database yhhblogNew

# 3. 将临时数据库中的数据导入已存在的数据库中
> use yhhblog_bk
> SELECT * INTO yhhblogNew..:MEASUREMENT FROM /.*/ GROUP BY *
> drop yhhblog_bk

# 保留策略已存在时,恢复
> influxd restore -portable -db yhhblog -newdb yhhblog_tmp -rp autogen -newrp autogen_tmp  yhhblog
# 进入influx控制台,执行拷贝
> user yhhblog_tmp
> SELECT * INTO yhhblogNew.autogen.:MEASUREMENT FROM /yhhblog_tmp.autogen_tmp.*/ GROUP BY *
> drop database yhhblog_tmp

grafana

chmod 777 ./grafana

标签:插件,compose,00,##,telegraf,influxdb,2018
来源: https://blog.csdn.net/qq_32096997/article/details/115010804