VictoriaMetrics 维多利亚实现 Prometheus 多租户标识

VictoriaMetrics 维多利亚实现 Prometheus 多租户标识

前言:

在我们环境中有多个不同的 K8S 集群并且每套集群都有自己的 Prometheus 那么我们在汇总监控数据的时候就会出现数据来源问题,究竟是 A 还是 B 集群,所以为了解决这个问题这里我就需要基于 Prometheus 多租户来实现

1 Prometheus 实现多租户标识

要实现多租户 Prometheus 的区别标签,可以借助 PromQL 的标签操作和 VictoriaMetrics 的配置。下面是一个示例配置过程:

  1. 配置 VictoriaMetrics:
  • 在 VictoriaMetrics 的配置文件中,确保开启了多租户支持。可以通过设置 vm-select -inputLabel 来指定标签名称用于区别租户。
  • 可以使用 vm-insert -searchExpr -outputLabel 命令来为每个租户添加一个标签,其中 是用于匹配每个租户数据的 PromQL 表达式, 是要添加的标签名称。
  1. 配置 Prometheus:
  • 在 Prometheus 的配置文件中,配置 VictoriaMetrics 作为远程存储。例如,使用 remote_write 配置指向 VictoriaMetrics 的写入接口。
  • 确保 Prometheus 配置文件中的 remote_write 部分的 remoteTimeout 值与 VictoriaMetrics 的写入超时时间保持一致。

注意事项:

  • 确保 VictoriaMetrics 和 Prometheus 的版本兼容性。
  • 配置必要的安全措施,例如身份验证和授权,以保护租户数据的访问。

要通过 PromQL 查询 VictoriaMetrics 数据并实现多租户 Prometheus 的区别标签,您需要进行以下配置和步骤:

  1. 配置 VictoriaMetrics:首先,确保您已正确安装和配置 VictoriaMetrics。请参考 VictoriaMetrics 的官方文档获取详细说明。
  2. 配置多租户 Prometheus:修改 Prometheus 的配置文件,添加以下内容:
# Prometheus 二进制部署配置
external_labels:
   tenant_id: ""

# Prometheus operator 部署
# spec.externalLabels
spec:
  replicas: 1
  externalLabels:
    tenant: my-tenant

将 替换为您的租户标识符。这将为每个采集到的指标添加一个名为 tenant_id 的标签。

  1. 启动 VictoriaMetrics:使用适当的选项(例如,-storage.local.dataPath=/path/to/data)启动 VictoriaMetrics。
  2. 在 Prometheus 中配置 VictoriaMetrics 作为远程存储:修改 Prometheus 的配置文件,添加以下内容:
# vm 单机版 api
remote_write:
  - url: "http://localhost:8428/api/v1/write"   # 这里的 URL 是您 VictoriaMetrics 单机版的地址

# vm 集群版 api
remote_write:
  - url: "http://vminsert:8480/insert/0/prometheus/"   # 这里的 URL 是您 VictoriaMetrics 集群版的地址

确保将 URL 替换为正确的 VictoriaMetrics 地址。

  1. 重新启动 Prometheus:重新启动 Prometheus 以使配置更改生效。
  2. 使用 PromQL 查询多租户数据:现在,您可以使用 PromQL 查询来区分不同租户的数据。例如,使用以下查询:

2 vmselect 基于 promxy 实现可视化数据查询

我们都知道 vmselect 是用来查询数据,所以我们可以通过 promxy 将其实现可视化从而实现 web 页面查询数据

# vm-promxy.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: promxy-config
  namespace: kube-vm
data:
  config.yaml: |
    promxy:
      server_groups:
      - static_configs:
        - targets: [vmselect:8481]  # 指定 vminser  svc地址,有多个则往后追加即可
        path_prefix: /select/0/promtheus  # 配置前缀
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: promxy
  namespace: kube-vm
spec:
  selector:
    matchLabels:
      app: promxy
  template:
    metadata:
      labels:
        app: promxy
    spec:
      containers:
        - args:
            - "--config=/etc/promxy/config.yaml"
            - "--web.enable-lifecycle"
            - "--log-level=trace"
          env:
            - name: ROLE
              value: "1"
          command:
            - "/bin/promxy"
          image: quay.io/jacksontj/promxy
          imagePullPolicy: Always
          name: promxy
          ports:
            - containerPort: 8082
              name: web
          volumeMounts:
            - mountPath: "/etc/promxy/"
              name: promxy-config
              readOnly: true
        - args: # container to reload configs on configmap change
            - "--volume-dir=/etc/promxy"
            - "--webhook-url=http://localhost:8082/-/reload"
          image: jimmidyson/configmap-reload:v0.1
          name: promxy-server-configmap-reload
          volumeMounts:
            - mountPath: "/etc/promxy/"
              name: promxy-config
              readOnly: true
      volumes:
        - configMap:
            name: promxy-config
          name: promxy-config
---
apiVersion: v1
kind: Service
metadata:
  name: promxy
  namespace: kube-vm
spec:
  type: NodePort
  ports:
    - port: 8082
  selector:
    app: promxy

直接创建上面的 yaml 文件即可

$ kubectl apply -f vm-promxy.yaml

浏览器访问:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇