在一个测试环境中,InfluxDB已经运行了一年多,今天突然发现不能保存监控数据了。我们先回顾一下InfluxDB如何配置的。
生成配置文件,
influxd config > /etc/influxdb/influxdb.generated.conf
启动服务指定
influxd -config influxdb.generated.conf
也可用通过环境变量指定
echo $INFLUXDB_CONFIG_PATH /root/influxdb.generated.conf
influxd
配置文件里面的配置都是可以通过环境变量去指定的,而且会覆盖配置文件里面的配置
这为容器部署提供了便利。
回到今天的问题,新pod的数据没法写入,但老pod监控没有问题,heapster一直报错,
E0801 18:40:05.837265 1 influxdb.go:219] InfluxDB write failed: {"error":"partial write: max-series-per-database limit exceeded: db=k8s (1000000/1000000) dropped=121"}
E0801 18:41:05.637630 1 influxdb.go:219] InfluxDB write failed: {"error":"partial write: max-series-per-database limit exceeded: db=k8s (1000000/1000000) dropped=247"}
查看官网这个参数配置。
解释的非常清楚,我就不翻译了,设置成0就不限制了。而且Note提示和我的现象完全一致。
扩展一下,还有一些别的配置,
通过这个配置修改InfluxDB的数据存储路径
缓存大小
还有一些就不一一列举,大家到官网上面去就可以看到。
API
查询数据库
curl -G 'http://localhost:8086/query' --data-urlencode 'q=SHOW DATABASES'
{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"],["k8s"]]}]}]}
查询所有的指标
# curl -G 'http://localhost:8086/query?db=k8s' --data-urlencode "q=SHOW MEASUREMENTS"
{"results":[{"statement_id":0,"series":[{"name":"measurements","columns":["name"],"values":[["cpu/limit"],["cpu/node_allocatable"],["cpu/node_capacity"],["cpu/node_reservation"],["cpu/node_utilization"],["cpu/request"],["cpu/usage"],["cpu/usage_rate"],["disk/io_read_bytes"],["disk/io_read_bytes_rate"],["disk/io_write_bytes"],["disk/io_write_bytes_rate"],["filesystem/available"],["filesystem/inodes"],["filesystem/inodes_free"],["filesystem/limit"],["filesystem/usage"],["memory/cache"],["memory/limit"],["memory/major_page_faults"],["memory/major_page_faults_rate"],["memory/node_allocatable"],["memory/node_capacity"],["memory/node_reservation"],["memory/node_utilization"],["memory/page_faults"],["memory/page_faults_rate"],["memory/request"],["memory/rss"],["memory/usage"],["memory/working_set"],["network/rx"],["network/rx_errors"],["network/rx_errors_rate"],["network/rx_rate"],["network/tx"],["network/tx_errors"],["network/tx_errors_rate"],["network/tx_rate"],["restart_count"],["uptime"]]}]}]}
查询单个指标
curl -G 'http://localhost:8086/query?db=k8s' --data-urlencode 'q=select mean(value) from "memory/cache" where "pod_name"=~ /^fqzxt-fqzshuat-20180621123611-3317231056-31jh3/
上面的=~ 是使用正则表达式
加上时间筛选
curl -G 'http://localhost:8086/query?db=k8s' --data-urlencode 'q=select * from "memory/cache" where "pod_name"=~ /^fqzxt-fqzshuat-20180621123611-3317231056-31jh3/ and time >= now()-10m '
或者是纳秒时间戳
curl -G 'http://localhost:8086/query?db=k8s' --data-urlencode 'q=select * from "memory/cache" where "pod_name"=~ /^fqzxt-fqzshuat-20180621123611-3317231056-31jh3/ and time > 1532316558000000000'
查询还支持函数,譬如mean()函数求取平局值,还有group等常规sql功能的支持
curl -G 'http://localhost:8086/query?db=k8s' --data-urlencode 'q=select mean("value") from "memory/cache" where "pod_name"=~ /^fqzxt-fqzshuat-20180621123611-3317231056-31jh3/ and time >= now() -5m group by time(1m) fill(null)'