V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Mars2333
V2EX  ›  Go 编程语言

go 如何动态加载判断条件

  •  
  •   Mars2333 · 2022-01-27 15:18:15 +08:00 · 3874 次点击
    这是一个创建于 1058 天前的主题,其中的信息可能已经有所发展或是发生改变。
    接到一个小需求需要定时统计消息队列堆积的数量。刚开始需求很简单比如堆积大于 100 就放到群里通知,于是就用 go 写了一个小脚本来定时遍历和推送消息。但是后来发现 100 这个阈值并不适合每个队列,可能 a 需要 50 就通知,而 b 到 1000 才通知等等,但是每次都是去修改判断太麻烦了,突然想到有好多软件的告警都是在后台配置了规则就可以生效,请问他们这种功能是怎么实现的?
    第 1 条附言  ·  2022-01-27 16:30:57 +08:00
    感谢大伙的方案,我打算尝试一下规则引擎,然后把脚本放到 k8s 的 cronjob 里,规则放到环境变量或者 configmap 里。
    27 条回复    2022-02-05 13:46:18 +08:00
    br_wang
        1
    br_wang  
       2022-01-27 15:20:59 +08:00
    启动参数?
    lllllIIIlll
        2
    lllllIIIlll  
       2022-01-27 15:25:58 +08:00
    复杂一点,你可能需要类似 apollo 这样的配置中心。简单一点,可以用 inotify 接口来监听配置文件的变化。
    yingqiuQAQ
        3
    yingqiuQAQ  
       2022-01-27 15:55:50 +08:00
    修改缓存
    2i2Re2PLMaDnghL
        4
    2i2Re2PLMaDnghL  
       2022-01-27 15:57:23 +08:00
    就是别把条件写死,而是使用 DSL 之类的。
    参考:格林斯潘第十定律
    ikaros
        5
    ikaros  
       2022-01-27 16:01:14 +08:00   ❤️ 1
    你如果有集中的配置中心比如 zookeeper 这种,他是有 onchange 事件的, 监听对应的 key 的 onchange 事件就行;
    你如果是配置文件可以用 fsnotify 这种监听文件变动的包
    kran
        6
    kran  
       2022-01-27 16:03:10 +08:00 via Android
    别瞎搞 dsl ,嵌入脚本完事儿了
    sun522198558
        7
    sun522198558  
       2022-01-27 16:09:11 +08:00
    chevalier
        8
    chevalier  
       2022-01-27 16:10:07 +08:00
    规则引擎,参考 7 楼那个
    MineDog
        9
    MineDog  
       2022-01-27 16:20:26 +08:00
    我这边的方案,首先程序可以通过 Prometheus 暴露队列数量,然后一个报警就是一条 PQL 查询,配置多个定时任务执行你的报警 PQL
    shanai
        10
    shanai  
       2022-01-27 16:22:44 +08:00
    简单一点、写个配置文件 配置好队列名和值 定时或者监听文件修改读取就行了
    Fitz
        11
    Fitz  
       2022-01-27 16:24:25 +08:00
    简单点的就整个配置文件直接改配置文件就行, viper 有 OnConfigChange, 是支持配置文件变化回调的, 复杂的就配置中心, etcd Consul apollo 都行, 但我看你这需求真没必要这么大炮打蚊子, 配置文件加 watch 足够了
    ScepterZ
        12
    ScepterZ  
       2022-01-27 16:56:10 +08:00
    这怎么和规则引擎扯上关系的,你这不就是需要个能配置的地方吗,公司有配置中心就接一下,没有就轮询 MySQL 呗
    pepesii
        13
    pepesii  
       2022-01-27 17:13:25 +08:00
    cronjob + configmap ,你代码都不需要改,每次去改 configmap 就完了
    darksword21
        14
    darksword21  
       2022-01-27 17:15:51 +08:00 via iPhone
    写个 js 解
    darksword21
        15
    darksword21  
       2022-01-27 17:16:24 +08:00 via iPhone
    @darksword21 解释器,然后用 js 写(逃
    iikebug
        16
    iikebug  
       2022-01-27 17:18:47 +08:00
    开个 tcp 端口出来,通过请求更改配置(呜呼
    janxin
        17
    janxin  
       2022-01-27 17:21:31 +08:00
    你这个需求重载配置就能解决,别瞎搞...
    BeautifulSoap
        18
    BeautifulSoap  
       2022-01-27 17:28:45 +08:00
    lz 这需求你们让 lz 用规则引擎有点杀鸡用牛刀了吧。。。。

    lz 的需求目前就是简单的想动态设置队列的阈值,最简单的难道不是把这些设置写成配置文件( json 、yaml 、toml 都可以),然后 go 程序定期从本地读这个配置不就好了。。。。。如果想玩的花一点那就把配置放配置中心之类的。。。
    mcfog
        19
    mcfog  
       2022-01-27 17:35:02 +08:00   ❤️ 7
    如果想基于晋升编程,不妨再进一步,记录下各个队列的最近消息速度,实现自适应阈值,比如一分钟一条的队列堆 10 条告警,一秒钟 100 条的堆 10000 条告警这样
    然后整个 PPT 说自己基于业界最先进的 AIOps 理念,实现了智能告警体系,减少了 87.58%的告警量,减少了每个新消息队列发布配置消耗 3.75 人的工作量,告警准确率上升 280%
    wellsc
        20
    wellsc  
       2022-01-27 17:37:10 +08:00
    agollo
    Mars2333
        21
    Mars2333  
    OP
       2022-01-27 17:42:41 +08:00
    @BeautifulSoap 这个小需求的确没必要,但是很好奇规则引擎所以想学一下
    Mars2333
        22
    Mars2333  
    OP
       2022-01-27 17:44:01 +08:00
    @mcfog 你的这段话很有可能会出现在我明年的年终 PPT 里!
    mlboy
        23
    mlboy  
       2022-01-27 19:07:47 +08:00
    b 站有个规则引擎,或者考虑 golang-lua
    VVVYGD
        24
    VVVYGD  
       2022-01-28 01:38:06 +08:00
    写个 fsm reactor handler 适配一下不就行了?
    nekoyaki
        25
    nekoyaki  
       2022-01-29 14:02:30 +08:00
    log4j2 漏洞就是像这样一点点堆出来的……
    dhq
        26
    dhq  
       2022-01-29 16:27:53 +08:00
    viper 监听配置文件写个回调是不是可以搞一搞
    kylefeng
        27
    kylefeng  
       2022-02-05 13:46:18 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2073 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:41 · PVG 08:41 · LAX 16:41 · JFK 19:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.