InfluxDB时间序列数据库 时间序列数据(Time Series Data),简称时序,时间序列数据包含三个重要部分,分别是 时间 ,主体 ,测量数值 . 由于时间序列数据的特点,一般关系型数据库可能无法满足对时间序列数据高效的写入和查询性能。 InfluxDB带有web界面。并且拥有Dashboard,Data Explorer,Alerts等功能.可以不用额外添加监控可视化工具了。 但InfluxDB2.0目前好像并没有开源集群版本 网上对InfluxDB的概述非常多,但对我这种不熟悉时序数据处理,也是第一次接触时序数据库的用户还是有一定上手难度。 本文章使用docker部署InfluxDB2.7.1
参考博客:https://www.cnblogs.com/xi-jie/p/17141891.html
https://blog.csdn.net/vincentxiaob/article/details/123580679
使用docker-compose部署InfluxDB2.7.1 仓库 https://github.com/NaZawsze/docker-influxdb/
1.配置docker-compose.yaml
文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 version: "3.1" x-shared-influxdb-variables: &shared-influxdb-variables # InfluxDB will create the specified database and an admin account with the specified credentials. # More info: https://github.com/influxdata/influxdata-docker/pull/102 INFLUXDB_DB: ${INFLUXDB_DB} INFLUXDB_ADMIN_USER: ${INFLUXDB_ADMIN_USER} INFLUXDB_ADMIN_PASSWORD: ${INFLUXDB_ADMIN_PASSWORD} services: influxdb: container_name: $INFLUXDB_DOCKER_CONTAINER_NAME image: influxdb:2.7.1 volumes: - /data/docker/database/influxdb2_1/config:/etc/influxdb2:rw - /data/docker/database/influxdb2_1/data:/var/lib/influxdb2:rw - /etc/localtime:/etc/localtime:ro - type: bind source: ./influxdb/docker-entrypoint-initdb.d target: /docker-entrypoint-initdb.d read_only: true ports: - "8086:8086" - "8083:8083" env_file: - ./.env environment: INFLUXDB_META_DIR: /var/lib/influxdb/meta INFLUXDB_DATA_DIR: /var/lib/influxdb/data INFLUXDB_DATA_WAL_DIR: /var/lib/influxdb/data INFLUXDB_DATA_MAX_SERIES_PER_DATABASE: 0 INFLUXDB_DATA_MAX_VALUES_PER_TAG: 0 INFLUXDB_DATA_SERIES_ID_SET_CACHE_SIZE: 100 INFLUXDB_HTTP_BIND_ADDRES: :${INFLUXDB_PORT} INFLUXDB_HTTP_ENABLED: "true" INFLUXDB_HTTP_AUTH_ENABLED: "true" << : *shared-influxdb-variables networks: - database # restart: always networks: database: driver: bridge
2. 配置.env
环境 1 2 3 4 5 6 # InfluxDB INFLUXDB_DOCKER_CONTAINER_NAME=influxdb2.7.1 INFLUXDB_PORT=8086 INFLUXDB_DB=default INFLUXDB_ADMIN_USER=admin INFLUXDB_ADMIN_PASSWORD=password
3.运行容器 运行容器
1 sudo docker-compose up -d
4.配置数据库 这里我是用web访问配置数据库 访问8086端口,配置好用户名密码,组织名以及存储桶名后保留token. 如果需要修改密码
1 2 3 influx user password -n admin -t xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx== # -t 后面跟的是初始化数据库时的token # 如果没有保存token需要在/var/lib/influxdb2/influxd.bolt里找到对应的用户
1.创建存储桶 Load Data -> BUCKETS -> Create Bucket NAME: testdatabase Delete Data OLDER THAN 30 days
2.创建token 官方文档: https://docs.influxdata.com/influxdb/cloud/security/tokens/create-token/ Load Data -> API TOKENS -> GENERATE API TOKEN -> Custom API Token Buckets选择我们刚刚创建的testdatabase,勾上读写权限,点击生成令牌(注意保存!!!) 下面Telegrafs大概就是模板的意思,可以在Load Data -> TELEGRAF -> CREATE CONFIGURATION -xWpdSthLiSOMFsSxBk-sTNwPZF9MHvWas7ICka3stXyZo2rORBrT5bHT_H2cY1qG32qylw1oXfGSgbpJUOigw==
部署Telegraf Telegraf 是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 InfluxDB 数据库。
1.配置Telegraf 获取配置文件
1 docker run --rm telegraf telegraf:1.27.4-alpine config > telegraf.conf
修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [global_tags] [agent] interval = "10s" round_interval = true metric_batch_size = 1000 metric_buffer_limit = 10000 collection_jitter = "0s" flush_interval = "10s" flush_jitter = "0s" precision = "0s" hostname = "" omit_hostname = false [[outputs.influxdb_v2]] urls = ["http://10.20.10.4:8086"] token = "-xWpdSthLiSOMFsSxBk-sTNwPZF9MHvWas7ICka3stXyZo2rORBrT5bHT_H2cY1qG32qylw1oXfGSgbpJUOigw==" organization = "SHELTER" bucket = "testdatabase"
2.将Telegraf加入docker-compose.yaml中 在influxdb容器配置的后面添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 telegraf: container_name: telegraf01 image: telegraf:1.27.4-alpine volumes: - /data/docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro - /:/hostfs:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /etc/localtime:/etc/localtime:ro ports: - "8125:8125/udp" - "8092:8092/udp" - "8094:8094/tcp" environment: HOST_ETC: /hostfs/etc HOST_PROC: /hostfs/proc HOST_SYS: /hostfs/sys HOST_VAR: /hostfs/var HOST_RUN: /hostfs/run HOST_MOUNT_PREFIX: /hostfs networks: - database
3.添加对docker容器的性能监控(存疑) 添加在/data/docker/telegraf/telegraf.conf
的最后
1 2 3 4 [[inputs.docker]] #指定docker启动的api接口,并指定需要采集那些容器指标 endpoint = "unix:///var/run/docker.sock" container_names = []
保存修改后重启telegraf容器,查看容器log发现报错,提示没有权限
1 E! [inputs.docker] Error in plugin: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?filters=%7B%22status%22%3A%7B%22running%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied
docker daemon socket是docker远程访问的api之一,分别是unix套接字文件、tcp监听端口和fd文件描述符。尝试打开docker daemon的tcp监听端口。 编辑/etc/default/docker
,添加一条
1 DOCKER_OPTS="-H tcp://0.0.0.0:2375"
注意这里是没有加密的,也没有身份认证,即可控制docker 重启docker查看2375端口是否起来 使用docker -H 10.20.10.4 version
测试 最后修改/data/docker/telegraf/telegraf.conf
1 2 3 4 5 6 7 8 [[inputs.docker]] # 指定docker启动的api接口,并指定需要采集那些容器指标 endpoint = "tcp://10.20.10.4:2375" # Deprecated (1.4.0), use container_name_include # container_names = [] 在1.4.0中已经抛弃,2.0中已经删除,更改如下 # container_name_include = [] # container_name_exclude = []
部署完成 之前一直都是简单部署Prometheus+Node Exporter+Grafana,第一次接触Telegraf+InfluxDB2 InfluxDB2相比较InfluxDB1变化了很多,本文章也只是简单的部署了一下,可能有其他缺陷。后面深入了解后还会更新本文章。 效果如本文章封面