0%

Metrics Queries

Metrics Queries 可以用来计算日志错误率或最近一段时间日志最多的前 N 个日志源.

LogQL 范围聚合查询函数

函数 说明
rate(log-range) 计​​算每秒的条目数
count_over_time(log-range) 计算给定范围内每个日志流的条目
bytes_rate(log-range) 计算每个流每秒的字节数
bytes_over_time(log-range) 计算给定范围内每个日志流使用的字节数
absent_over_time(log-range) 如果传递给它的范围向量有任何元素,则返回一个空向量;如果传递给它的范围向量没有元素,则返回一个值为 1 的 1 元素向量。(absent_over_time对于在一段时间内不存在标签组合的时间序列和日志流时发出警报很有用。)

示例

# 计算 MySQL 作业最后五分钟内的所有日志行。
count_over_time({job="mysql"}[5m])
# MySQL 作业在每台主机的最后几分钟内所有非超时错误的每秒速率,并且仅包括持续时间超过 10 秒的错误
sum by (host) (rate({job="mysql"} |= "error" != "timeout" | json | duration > 10s [1m]))

内置聚合运算符

函数 说明
sum 计​​算标签的总和
avg 计算标签的平均值
min 在标签上选择最小值
max 选择最大标签
stddev 计算标签的总体标准差
stdvar 计算标签的总体标准方差
count 计​​算向量中的元素个数
topk 通过样本值选择最大的 k 个元素
bottomk 通过样本值选择最小的 k 个元素

示例

# 获取日志吞吐量最高的前 10 个应用程序
topk(10,sum(rate({region="us-east1"}[5m])) by (name))

# 获取 k8s ns1 命名空间下日志输出量前 10 的 Pod
topk(10,sum(rate({namespace="ns1"}[5m])) by (pod))

# 获取指定作业的最后五分钟的日志行数,按级别分组
sum(count_over_time({job="mysql"}[5m])) by (level)

# /home按区域获取对 NGINX 日志端点的 HTTP GET 请求速率
avg(rate(({job="nginx"} |= "GET" | json | path="/home")[10s])) by (region)

参考链接

查看crt证书有效期

openssl x509 -in cert.crt -noout -text

重签服务端证书

./easyrsa build-server-full server_name nopass

然后用新签的证书(./pki/issue/./pki/private/ 目录下)替换在用的 server.crtserver.key.

重签客户端证书

./easyrsa build-client-full client_name nopass

修改证书有效期时间

# 修改 easy-rsa 目录下 vars 模板文件参数
# /usr/share/doc/easy-rsa-3.0.8/vars.example 默认所有参数, 注意修改版本号
set_var EASYRSA_CERT_EXPIRE   3650

kubectl patch crd/此处写CRD的名字 -p '{"metadata":{"finalizers":[]}}' --type=merge

两种都可以不用在 hosts 中添加域名解析即可完成测试.

方法1

curl -H "Host: whoami.local.com" http://192.168.1.32:31532/whoami

方法2

curl --resolve whoami.local.com:31532:192.168.1.32 whoami.local.com:31532/whoami

Prometheus 定义了 4 中不同的指标类型 (metric type):Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要).

Counter

  • Counter 用于累计值,例如 记录 请求次数、任务完成数、错误发生次数
  • 一直增加,不会减少
  • 重启进程后,会被重置
# http响应总数
http_response_total{method="GET",endpoint="/api/tracks"} 100

Gauge

  • Gauge 常规数值,例如 温度变化、内存使用变化
  • 可增可减的仪表盘
  • 重启进程后,会被重置
# 如cpu、内存使用量
memory_usage_bytes{host="master-01"} 80
cpu_usage{host="master-01"} 60

Histogram

  • 对记录的内容进行分组,提供 count 和 sum 全部值
  • 直接反应了在不同区间内样本的个数
# 如:prometheus_tsdb_compaction_chunk_range_bucket 指标
# HELP prometheus_tsdb_compaction_chunk_range Final time range of chunks on their first compaction
# TYPE prometheus_tsdb_compaction_chunk_range histogram
prometheus_tsdb_compaction_chunk_range_bucket{le="100"} 0
prometheus_tsdb_compaction_chunk_range_bucket{le="400"} 0
prometheus_tsdb_compaction_chunk_range_bucket{le="1600"} 0
prometheus_tsdb_compaction_chunk_range_bucket{le="6400"} 0
prometheus_tsdb_compaction_chunk_range_bucket{le="25600"} 0
prometheus_tsdb_compaction_chunk_range_bucket{le="102400"} 0
prometheus_tsdb_compaction_chunk_range_bucket{le="409600"} 0
prometheus_tsdb_compaction_chunk_range_bucket{le="1.6384e+06"} 260
prometheus_tsdb_compaction_chunk_range_bucket{le="6.5536e+06"} 780
prometheus_tsdb_compaction_chunk_range_bucket{le="2.62144e+07"} 780
prometheus_tsdb_compaction_chunk_range_bucket{le="+Inf"} 780
prometheus_tsdb_compaction_chunk_range_sum 1.1540798e+09
prometheus_tsdb_compaction_chunk_range_count 780

Summary

  • 提供 count 和 sum 全部值
  • 提供一个 quantiles 的功能,可以按%比划分跟踪的结果
  • 例如:quantile 取值 0.95,表示取采样值里面的 95% 数据
# HELP prometheus_tsdb_wal_fsync_duration_seconds Duration of WAL fsync.
# TYPE prometheus_tsdb_wal_fsync_duration_seconds summary
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.5"} 0.012352463
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.9"} 0.014458005
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.99"} 0.017316173
prometheus_tsdb_wal_fsync_duration_seconds_sum 2.888716127000002
prometheus_tsdb_wal_fsync_duration_seconds_count 216

从上面的样本中可以得知当前 Prometheus Server 进行 wal_fsync 操作的总次数为 216 次,耗时 2.888716127000002s。其中中位数(quantile=0.5)的耗时为 0.012352463,9 分位数(quantile=0.9)的耗时为 0.014458005s。

DATE_SUB() 函数

DATE_SUB(date,INTERVAL expr type)
type 值
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR

示例

select * from xxx_table where create_time > DATE_SUB(NOW(),INTERVAL 1 HOUR);