kk Blog —— 通用基础


date [-d @int|str] [+%s|"+%F %T"]
netstat -ltunp
sar -n DEV 1

TICK: I 时序数据库InfluxDB

wget https://repos.influxdata.com/rhel/8/x86_64/stable/influxdb-1.8.10.x86_64.rpm

基本概念 何谓时间序列数据库?

什么是时间序列数据库,最简单的定义就是数据格式里包含Timestamp字段的数据,比如某一时间环境的温度,CPU的使用率等。但是,有什么数据不包含Timestamp呢?几乎所有的数据其实都可以打上一个Timestamp字段。时间序列数据的更重要的一个属性是如何去查询它,包括数据的过滤,计算等等。

1、特色功能

时序性(Time Series):与时间相关的函数的灵活使用(诸如最大、最小、求和等);

度量(Metrics):对实时大量数据进行计算;

事件(Event):支持任意的事件数据,换句话说,任意事件的数据我们都可以做操作。

2、主要特点

schemaless(无结构),可以是任意数量的列;

min, max, sum, count, mean, median 一系列函数,方便统计;

Native HTTP API, 内置http支持,使用http读写;

Powerful Query Language 类似sql;

Built-in Explorer 自带管理工具。

1
2
3
4
5
6
7
8
9
10
11
# 路径:/usr/bin
influxd            # influxdb服务器
influx             # influxdb命令行客户端
influx_inspect     # 查看工具
influx_stress      # 压力测试工具
influx_tsm         # 数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式)

# 路径:/var/lib/influxdb/
data               # 存放最终存储的数据,文件以.tsm结尾
meta               # 存放数据库元数据
wal                # 存放预写日志文件

服务端

1
service influxdb start

客户端

1
influx

名词解释

在具体的讲解influxdb的相关操作之前先说说influxdb的一些专有名词,这些名词代表什么。

database:数据库;

measurement:数据库中的表;

points:表里面的一行数据。

influxDB中独有的一些概念

Point由时间戳(time)、数据(field)和标签(tags)组成。

time:每条数据记录的时间,也是数据库自动生成的主索引;

fields:各种记录的值;

tags:各种有索引的属性。

还有一个重要的名词:series

所有在数据库中的数据,都需要通过图表来表示,series表示这个表里面的所有的数据可以在图标上画成几条线(注:线条的个数由tags排列组合计算出来)

命令

https://www.cnblogs.com/suhaha/p/11692115.html

如果measurement、tag、field等的标识符除了[A-z,0-9,_]之外,还有其他字符,或者标识符是keyword关键字,那么在引用的时候必须加上双引号。

比如在表 “level description"就是一个带有空格的field,如此一来在查询到的时候,就必须加上双引号了。

官方推荐,虽然有些标识符不是必须使用双引号,但是推荐对所有标识符使用双引号!

用户管理

1
2
3
4
5
6
7
8
9
#显示用户  
show users

#创建用户
create user "username" with password 'password'
#创建管理员权限用户create user "username" with password 'password' with all privileges

#删除用户
drop user "username"

数据库访问权限

1
2
3
4
5
6
7
创建权限 GRANT READ    ON mydb    TO leo   

撤消权限 REVOKE ALL    ON mydb    FROM leo 管理权限

创建集群管理权限 GRANT ALL PRIVILEGES TO leo

撤消集群管理权限 REVOKE ALL PRIVILEGES FROM leo
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
#创建数据库
create database "db_name"

#显示所有的数据库
show databases

# 查看数据库大小
select * from _internal."monitor"."shard" where "database"='telegraf' order by time desc limit 1;
select sum(diskBytes) from _internal."monitor"."shard" where "database"='telegraf' and "time"=1722576120000000000;
du -sh /var/lib/influxdb

#删除数据库
drop database "db_name"

#使用数据库
use db_name

#显示该数据库中所有的表
show measurements

# 查看series
show series from cpu

#创建表,直接在插入数据的时候指定表名
insert test,host=127.0.0.1,monitor_name=test count=1

# 删除数据
delete from system where time < 1693497600000000000;

#删除表
drop measurement "measurement_name"


du -sh /var/lib/influxdb/data/

向数据库中插入数据。

通过命令行

1
2
use testDb
insert test,host=127.0.0.1,monitor_name=test count=1

通过http接口

1
curl -i -XPOST 'http://127.0.0.1:8086/write?db=testDb' --data-binary 'test,host=127.0.0.1,monitor_name=test count=1'

读者看到这里可能会观察到插入的数据的格式貌似比较奇怪,这是因为influxDB存储数据采用的是Line Protocol格式。那么何谓Line Protoco格式?

Line Protocol格式:写入数据库的Point的固定格式。 在上面的两种插入数据的方法中都有这样的一部分:

1
test,host=127.0.0.1,monitor_name=test count=1

其中:

1
2
3
test:表名;
host=127.0.0.1,monitor_name=test:tag;
count=1:field

想对此格式有详细的了解参见官方文档

查询数据库中的数据。

通过命令行

1
select * from test order by time desc

通过http接口

1
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testDb" --data-urlencode "q=select * from test order by time desc"

influxDB是支持类sql语句的

InfluxDB 数据保留策略操作

1
2
3
4
5
6
7
8
语法:CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]

    <retention_policy_name>:保留策略名称
    <database_name>:数据库名称
    <duration>:保留策略对应数据的过期时间
    REPLICATION:副本因子
    SHARD DURATION:分片组默认时长
    [DEFAULT]:是否为默认的保留策略

创建数据保留策略

1
CREATE RETENTION POLICY  "influx_retention" ON "mydb" DURATION 30d REPLICATION DEFAULT;

查看保留期

1
SHOW RETENTION POLICIES ON mydb

修改保留期

1
ALTER RETENTION POLICY "influx_retention" ON mydb DURATION 15d

删除保留期

1
DROP RETENTION POLICY "influx_retention" ON mydb 

特色函数

influxdb函数分为聚合函数,选择函数,转换函数,预测函数等。除了与普通数据库一样提供了基本操作函数外,还提供了一些特色函数以方便数据统计计算,下面会一一介绍其中一些常用的特色函数。

聚合函数:FILL(), INTEGRAL(),SPREAD(), STDDEV(),MEAN(), MEDIAN()等。

选择函数: SAMPLE(), PERCENTILE(), FIRST(), LAST(), TOP(), BOTTOM()等。

转换函数: DERIVATIVE(), DIFFERENCE()等。

预测函数:HOLT_WINTERS()。

GROUP BY,FILL()

如下语句中 GROUP BY time(12m),* 表示以每12分钟和tag(location)分组(如果是GROUP BY time(12m)则表示仅每12分钟分组,GROUP BY 参数只能是time和tag)。然后fill(200)表示如果这个时间段没有数据,以200填充,mean(field_key)求该范围内数据的平均值(注意:这是依据series来计算。其他还有SUM求和,MEDIAN求中位数)。LIMIT 7表示限制返回的point(记录数)最多为7条,而SLIMIT 1则是限制返回的series为1个。

INTEGRAL(field_key, unit)

计算数值字段值覆盖的曲面的面积值并得到面积之和。测试数据如下:

SPREAD(field_key)

计算数值字段的最大值和最小值的差值。

1
2
3
4
5
6
7
8
    > SELECT SPREAD("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m),* fill(18) LIMIT 3 SLIMIT 1 SOFFSET 1
    name: h2o_feet
    tags: location=santa_monica
    time                              spread
    ----                              ------
    2015-08-17T23:48:00Z            18
    2015-08-18T00:00:00Z             0.052000000000000046
    2015-08-18T00:12:00Z             0.09799999999999986

STDDEV(field_key)

计算字段的标准差。influxdb用的是贝塞尔修正的标准差计算公式 ,如下:

mean=(v1+v2+…+vn)/n;

stddev = math.sqrt(((v1-mean)2 + (v2-mean)2 + …+(vn-mean)2)/(n-1))

PERCENTILE(field_key, N)

选取某个字段中大于N%的这个字段值。

如果一共有4条记录,N为10,则10%*4=0.4,四舍五入为0,则查询结果为空。N为20,则 20% * 4 = 0.8,四舍五入为1,选取的是4个数中最小的数。如果N为40,40% * 4 = 1.6,四舍五入为2,则选取的是4个数中第二小的数。由此可以看出N=100时,就跟MAX(field_key)是一样的,而当N=50时,与MEDIAN(field_key)在字段值为奇数个时是一样的。

SAMPLE(field_key, N)

随机返回field key的N个值。如果语句中有GROUP BY time(),则每组数据随机返回N个值。

CUMULATIVE_SUM(field_key)

计算字段值的递增和。

DERIVATIVE(field_key, unit) 和 NON_NEGATIVE_DERIVATIVE(field_key, unit)

计算字段值的变化比。unit默认为1s,即计算的是1秒内的变化比。

如下面的第一个数据计算方法是 (2.116-2.064)/(6*60) = 0.00014..,其他计算方式同理。虽然原始数据是6m收集一次,但是这里的变化比默认是按秒来计算的。如果要按6m计算,则设置unit为6m即可。

http://wjhsh.net/dehai-p-4883451.html

http://t.zoukankan.com/jackyroc-p-7677508.html

https://blog.csdn.net/qq_43386944/article/details/122719668

https://www.bbsmax.com/A/B0zqgWx85v/

TICK: T 数据采集工具Telegraf

wget https://repos.influxdata.com/rhel/8/x86_64/stable/telegraf-1.23.4-1.x86_64.rpm

基本概念

telegraf 属于 TICK 技术栈中的T

Telegraf 是一个用Go语言编写的代理程序,可收集系统和服务的统计数据,并写入到InfluxDB数据库。内存占用小,通过插件系统可轻松添加支持其他服务的扩展。

Telegraf metric是用于在处理期间对数据建模的内部表示,这些指标完全基于InfluxDB的数据模型,包含四个主要组件:

度量名称(Measurement)

标签(tags)

字段(Field)

时间戳

为什么要用Telegraf ?

可以采集多种组件的运行信息cpu memory,不需要手动写定时脚本采集,降低了数据的获取难度

配置简单

与InfluxDB完美结合

按照时间序列采集数据

轻量级,占用内存小

安装

rpm -ivh telegraf-1.23.4-1.x86_64.rpm

配置

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
interval = "60s"

[root@localhost ~]# diff /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.orig 
106c106
<   hostname = "192.168.100.197"
---
>   hostname = ""
130,136d129
<      urls = ["http://192.168.100.178:8086"] # required 
<      database = "telegraf" # required
<      timeout = "5s"
<      username = "telegraf"
<      password = "password"
< 
< 
5849,5850c5842
< [[inputs.net]]
<       interfaces = ["eth*", "enp0s[0-1]", "lo"]
---
> 
6081,6085d6072
< [[inputs.nstat]]
<     proc_net_netstat = "/proc/net/netstat"
<     proc_net_snmp = "/proc/net/snmp"
<     proc_net_snmp6 = "/proc/net/snmp6"
<     dump_zeros       = true

add

1
2
3
4
[[inputs.procstat]]
	exe = "mariadbd"
[[inputs.procstat]]
	exe = "httpd"

add

percpu 改成 false 能减少大量数据

1
2
3
[[inputs.cpu]]
	## Whether to report per-cpu stats or not
	percpu = false

disk 选项

1
2
3
4
5
6
7
8
9
[[inputs.disk]]
	# win 指定盘符
	mount_points = ["C:", "D:"]

	# win 去除 CDFS, 一定要大写
	ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs", "CDFS"]

	# 去除 cifs
	ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs", "cifs"]

window telegraf

https://blog.csdn.net/chen_221/article/details/125664892

1.下载最新telegraf压缩包

https://github.com/influxdata/telegraf/releases

将解压出来文件复制到 C:\Program Files\telegraf 下

修改 telegraf.conf 文件

1
2
3
4
5
6
7
8
9
10
11
12
# 修改这两个配置, 新增会重复导致失败 .\telegraf.exe --debug
interval = "60s"
hostname = "192.168.100.196"


# 新增下面配置
[[outputs.influxdb]]
	urls = ["http://192.168.100.178:8086"]
	database = "telegraf"
	timeout = "5s"
	username = "telegraf"
	password = "password"

注册Windows服务

运行powershell,进入 C:\Program Files\telegraf 文件夹,执行 .\telegraf.exe -service install 后查看服务, 然后启动服务即可

.\telegraf.exe -service uninstall