监控数据通过推模式,发给夜莺,夜莺会转发给后端时序库,有时候可能想对数据做一些二次处理,比如 Drop 掉一些数据或者改改内容之类的,此时就需要 relabel 能力了,这个功能是社区小伙伴贡献的,和 Prometheus 的 relabel 类似,只是配置的时候注意配置项的大小写。在夜莺 5.x 版本中,数据是通过 n9e-server 转发的,所以,relabel 的逻辑放在了 server.conf 中。

    1. [[Writers]]
    2. Url = "http://127.0.0.1:9090/api/v1/write"
    3. # Basic auth username
    4. BasicAuthUser = ""
    5. # Basic auth password
    6. BasicAuthPass = ""
    7. # timeout settings, unit: ms
    8. Headers = ["X-From", "n9e"]
    9. Timeout = 10000
    10. DialTimeout = 3000
    11. TLSHandshakeTimeout = 30000
    12. ExpectContinueTimeout = 1000
    13. IdleConnTimeout = 90000
    14. # time duration, unit: ms
    15. KeepAlive = 30000
    16. MaxConnsPerHost = 0
    17. MaxIdleConns = 100
    18. MaxIdleConnsPerHost = 100
    19. # [[Writers.WriteRelabels]]
    20. # Action = "replace"
    21. # SourceLabels = ["__address__"]
    22. # Regex = "([^:]+)(?::\\d+)?"
    23. # Replacement = "$1:80"
    24. # TargetLabel = "__address__"

    relabel 的逻辑就是上面的 [[Writers.WriteRelabels]] 部分,双中括号的,所以这是个数组,每个 Writer 可以配置多个 Relabel 逻辑,Action 部分支持如下选项:

    1. const (
    2. Replace Action = "replace"
    3. Keep Action = "keep"
    4. Drop Action = "drop"
    5. HashMod Action = "hashmod"
    6. LabelMap Action = "labelmap"
    7. LabelDrop Action = "labeldrop"
    8. LabelKeep Action = "labelkeep"
    9. Lowercase Action = "lowercase"
    10. Uppercase Action = "uppercase"
    11. )

    比如我想把带有 env=test 标签的数据删除,可以这么配置:

    1. [[Writers.WriteRelabels]]
    2. Action = "drop"
    3. SourceLabels = ["env"]
    4. Regex = "^test$"

    其他的就不一一介绍了,大家知道这里支持 Relabel 这个功能就可以了,其他 Action 的用法可以参考 Prometheus 的文档。