如何使用Prometheus監(jiān)控WireGuard

這篇文章主要介紹“如何使用 Prometheus 監(jiān)控 WireGuard”,在日常操作中,相信很多人在如何使用 Prometheus 監(jiān)控 WireGuard問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用 Prometheus 監(jiān)控 WireGuard”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網站建設服務10余年為成都成都主動防護網小微創(chuàng)業(yè)公司專業(yè)提供成都企業(yè)網站建設營銷網站建設商城網站建設手機網站建設小程序網站建設網站改版,從內容策劃、視覺設計、底層架構、網頁布局、功能開發(fā)迭代于一體的高端網站建設服務。

云原生是一種信仰,是一種全新的技術模式,它不局限于你腦海中固有的那一畝三分地。人有多大膽,地有多大產,只要你敢想,萬物皆可云原生。作為一個云原生狂熱信徒,給大家看看我的狂熱程度:

我的所有服務(包括博客、鏡像加速、評論服務)都部署在云上 k3s 集群中,同時本地和家中設備均和云上集群 Pod 網絡通過 WireGuard 打通,家中網關 DNS 用的是 CoreDNS 對國內外解析進行分流,網關使用 Envoy 來代理家中的各種服務,等等。

家中的所有設備和服務,包括云上的服務,全部使用 kube-prometheus 進行監(jiān)控,具體我就不細說了,截幾張圖給大家看看:

如何使用 Prometheus 監(jiān)控 WireGuard

如何使用 Prometheus 監(jiān)控 WireGuard

如何使用 Prometheus 監(jiān)控 WireGuard

如何使用 Prometheus 監(jiān)控 WireGuard

如何使用 Prometheus 監(jiān)控 WireGuard

如何使用 Prometheus 監(jiān)控 WireGuard

如何使用 Prometheus 監(jiān)控 WireGuard

如何使用 Prometheus 監(jiān)控 WireGuard

現(xiàn)在還剩下個 WireGuard 沒有監(jiān)控,下面就來看看如何使用 Prometheus 來監(jiān)控 WireGuard

如果看到這篇文章的你仍然是個 WireGuard 新手,請務必按照以下順序閱讀每一篇文章:

  • WireGuard 教程:WireGuard 的工作原理

  • WireGuard 快速安裝教程

  • WireGuard 配置教程:使用 wg-gen-web 來管理 WireGuard 的配置

  • Wireguard 全互聯(lián)模式(full mesh)配置指南

如果遇到不明白的,可以參考這篇文章的注解:

  • WireGuard 教程:WireGuard 的搭建使用與配置詳解

剩下這幾篇文章是可選的,有興趣就看看:

  • 我為什么不鼓吹 WireGuard

  • Why not "Why not WireGuard?"

  • WireGuard 教程:使用 DNS-SD 進行 NAT-to-NAT 穿透

WireGuard 本身是不暴露任何指標的,需要通過第三方的 exporter 來暴露指標。目前有兩個版本的 exporter,單純使用其中一個都不太完美,所以我干脆都用。

1. 鏡像構建

這兩個 exporter 都沒有提供 Docker 鏡像,所以我只好自己動手了,Rust 版本 exporter 的 Dockerfile 如下:

FROM rust as builder

LABEL description="Docker container for building prometheus exporter for wireguard."
LABEL maintainer="Ryan Yang <yangchuansheng33@gmail.com>"

WORKDIR /usr/src/
RUN git clone https://github.com/MindFlavor/prometheus_wireguard_exporter.git; \
    cd prometheus_wireguard_exporter; \
    cargo install --path .

FROM debian:buster-slim
RUN sh -c "echo 'deb http://deb.debian.org/debian buster-backports main contrib non-free' > /etc/apt/sources.list.d/buster-backports.list"; \
    apt update; \
    apt install -y wireguard; \
    rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/cargo/bin/prometheus_wireguard_exporter /usr/local/bin/prometheus_wireguard_exporter
CMD ["prometheus_wireguard_exporter"]

Go 版本 exporter 的 Dockerfile 如下:

FROM golang AS build

LABEL description="Docker container for building prometheus exporter for wireguard."
LABEL maintainer="Ryan Yang <yangchuansheng33@gmail.com>"

WORKDIR /src
RUN git clone https://github.com/mdlayher/wireguard_exporter; \
    cd wireguard_exporter/cmd/wireguard_exporter/; \
    go build .

FROM busybox:glibc
COPY --from=build /src/wireguard_exporter/cmd/wireguard_exporter/wireguard_exporter .
CMD ["./wireguard_exporter"]

鏡像的構建我就不贅述了,大家可以看我的 GitHub 倉庫。

2. prometheus_wireguard_exporter 部署

prometheus_wireguard_exporter 直接利用 wg 的配置文件來獲取指標,它自己不需要單獨準備配置文件,所以只需將 /etc/wireguard 目錄映射到容器中。如果你的 wg 組網模式是中心輻射型,建議只需監(jiān)控 wg 網關,如果是全互聯(lián)模式,也可以只監(jiān)控其中一個用來生成配置的節(jié)點,當然你也可以監(jiān)控所有節(jié)點。

我這里只監(jiān)控了其中一個用來生成配置的節(jié)點,以下是部署清單:

# wireguard_exporter.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wireguard-exporter
  labels:
    app: wireguard-exporter
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: wireguard-exporter
  strategy:
    rollingUpdate:
      maxSurge: 0
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: wireguard-exporter
    spec:
      nodeSelector:
        kubernetes.io/hostname: blog-k3s03 
      tolerations:
      - key: node-role.kubernetes.io/ingress
        operator: Exists
        effect: NoSchedule
      hostNetwork: true 
      containers:
      - name: wireguard-exporter
        image: yangchuansheng/wireguard_exporter 
        command: ["/usr/local/bin/prometheus_wireguard_exporter"]
        args: ["-n", "/etc/wireguard/wg0.conf", "-r"]
        securityContext:
          capabilities:
            add: ["NET_ADMIN"]
        ports:
        - containerPort: 9586 
          protocol: TCP
          name: http-metrics
        volumeMounts:
        - mountPath: /etc/localtime
          name: localtime
        - mountPath: /etc/wireguard
          name: config
      volumes:
      - name: localtime
        hostPath:
          path: /etc/localtime
      - name: config
        hostPath:
          path: /etc/wireguard
---
apiVersion: v1
kind: Service
metadata:
  name: wireguard-exporter
  labels:
    app: wireguard-exporter
spec:
  sessionAffinity: ClientIP
  selector:
    app: wireguard-exporter
  ports:
    - protocol: TCP
      name: http-metrics
      port: 9586
      targetPort: 9586

使用部署清單部署 prometheus_wireguard_exporter

$ kubectl apply -f wireguard_exporter.yaml

查看是否部署成功:

$ kubectl get pod -l app=wireguard-exporter
NAME                                  READY   STATUS    RESTARTS   AGE
wireguard-exporter-78d44b8bd9-ppm9t   1/1     Running   0          41s

3. wireguard_exporter 部署

wireguard_exporter 需要單獨準備配置文件,格式如下:

# /etc/wireguard/wg0.toml

[[Peer]]
public_key = "cGsHfwmPEiLJj6Fv3GU5xFvdyQByn50PC5keVGJEe0w="
name = "RouterOS"

[[Peer]]
public_key = "izv5L8Kn48+SVwE3D498mdi7YfSrn6aKDNIRxIAHDkU="
name = "macOS"

[[Peer]]
public_key = "EOM0eLVxsj9jGKWamuIn65T3Wmqw36uLOg2ss7yJ2gw="
name = "blog-k3s02"

[[Peer]]
public_key = "1RxEokE41ypnIMsbE5OVHFVx199V71MOYzpzQ8bbsFY="
name = "blog-k3s01"

[[Peer]]
public_key = "b3JiuvdOUV7cFpXyJzLbO2Ea4V4c4AoyugIC/ufGZ18="
name = "Openwrt"

[[Peer]]
public_key = "FIbzqNv10cdCDO/Ka2GIN9rpxNVV2tO2f00R71EHeSg="
name = "Oneplus"

你需要將 wg0.conf 中的配置內容轉化為上面的格式保存到 wg0.toml 文件中,再將其映射到容器中。部署清單如下:

# wireguard_exporter_go.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wireguard-exporter-go
  labels:
    app: wireguard-exporter-go
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: wireguard-exporter-go
  strategy:
    rollingUpdate:
      maxSurge: 0
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: wireguard-exporter-go
    spec:
      nodeSelector:
        kubernetes.io/hostname: blog-k3s03 
      tolerations:
      - key: node-role.kubernetes.io/ingress
        operator: Exists
        effect: NoSchedule
      hostNetwork: true 
      containers:
      - name: wireguard-exporter-go
        image: docker.io/yangchuansheng/wireguard_exporter:golang 
        command: ["/wireguard_exporter"]
        args: ["-wireguard.peer-file", "/etc/wireguard/wg0.toml", "-metrics.addr", ":9587"]
        securityContext:
          capabilities:
            add: ["NET_ADMIN"]
        ports:
        - containerPort: 9587 
          protocol: TCP
          name: http-metrics
        volumeMounts:
        - mountPath: /etc/localtime
          name: localtime
        - mountPath: /etc/wireguard
          name: config
      volumes:
      - name: localtime
        hostPath:
          path: /etc/localtime
      - name: config
        hostPath:
          path: /etc/wireguard
---
apiVersion: v1
kind: Service
metadata:
  name: wireguard-exporter-go
  labels:
    app: wireguard-exporter-go
spec:
  sessionAffinity: ClientIP
  selector:
    app: wireguard-exporter-go
  ports:
    - protocol: TCP
      name: http-metrics
      port: 9587
      targetPort: 9587

使用部署清單部署 wireguard_exporter

$ kubectl apply -f wireguard_exporter_go.yaml

查看是否部署成功:

$ kubectl get pod -l app=wireguard-exporter-go
NAME                                     READY   STATUS    RESTARTS   AGE
wireguard-exporter-go-7f5c88fc68-h55x5   1/1     Running   0          52s

4. 加入 Prometheus 監(jiān)控

kube-prometheus 的部署方式這里略過,新手請自己查閱文檔部署,我只講關鍵的步驟。要想讓 kube-prometheus 能獲取到 WireGuard 的指標,需要創(chuàng)建相應的 ServiceMonitor 資源,資源清單如下:

# prometheus-serviceMonitorWireguard.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: wireguard-exporter 
  name: wireguard-exporter
  namespace: monitoring
spec:
  endpoints:
  - interval: 15s
    port: http-metrics
  namespaceSelector:
    matchNames:
    - default 
  selector:
    matchLabels:
      app: wireguard-exporter 
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: wireguard-exporter-go
  name: wireguard-exporter-go
  namespace: monitoring
spec:
  endpoints:
  - interval: 15s
    port: http-metrics
  namespaceSelector:
    matchNames:
    - default
  selector:
    matchLabels:
      app: wireguard-exporter-go

使用資源清單創(chuàng)建 ServiceMonitor

$ kubectl apply -f prometheus-serviceMonitorWireguard.yaml

查看 Prometheus 中對應的 Target 是否已經獲取成功:

如何使用 Prometheus 監(jiān)控 WireGuard

最后在 Grafana 中添加儀表盤,通過環(huán)境變量來切換不同 wg 接口的監(jiān)控儀表盤。

如何使用 Prometheus 監(jiān)控 WireGuard

如何使用 Prometheus 監(jiān)控 WireGuard

如何使用 Prometheus 監(jiān)控 WireGuard

至于儀表盤的語法細節(jié),我就不展開講了,感興趣的可以先導入我的儀表盤,后面遇到不懂的再來問我。儀表盤 json 文件鏈接:

  • https://cdn.jsdelivr.net/gh/yangchuansheng/docker-image@master/wireguard_exporter/dashboard.json

到此,關于“如何使用 Prometheus 監(jiān)控 WireGuard”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

網頁題目:如何使用Prometheus監(jiān)控WireGuard
鏈接地址:http://muchs.cn/article34/pphppe.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機、用戶體驗外貿建站、網站導航、軟件開發(fā)網站設計

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站建設