type
status
date
slug
summary
tags
category
icon
password
用到的库
apisix/prometheus/exporter.lua
变量 metrics 用来定义指标,
prmetheus_keys
prometheus
ngx.sleep(0)
OpenResty 中的 ngx.sleep(0) 调用会主动放弃当前的 CPU 执行权,而把执行权交还给 nginx 事件循环和其他并发请求。当前
yield 了的 Lua 协程会在下一个 nginx 事件处理周期里接着继续运行。
一个典型应用:
shared-dict怎样实现不阻塞nginx进程?每分钟刷新一次缓存,刷新的时候,几十秒,nginx无反应,单个进程100%,其他进程没事,但是也无反应,好像访问的时候也到这个100%的进程了,导致无反应。
解决方法是:可以在操作中穿插一些 ngx.sleep(0) 用来让其他协程获得运行机会。
prometheus 里有大量的调用 dict ,执行 reload 后大量的同步会导致阻塞。
init:
dict : 原始全局字典
_counter : 用来记录 worker 计数器,并同步到dict
key_index: 用来将dict key 同步到 worker 中
用特权进程来提供服务
想办法让指标就是排好序
- 指标名存储到对应的 table 树里面,定时同步
- 输出只有循环和取 dict