中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用 Prometheus 監控 WireGuard

發布時間:2021-07-14 15:04:31 來源:億速云 閱讀:173 作者:chen 欄目:云計算

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

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

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

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

如何使用 Prometheus 監控 WireGuard

如何使用 Prometheus 監控 WireGuard

如何使用 Prometheus 監控 WireGuard

如何使用 Prometheus 監控 WireGuard

如何使用 Prometheus 監控 WireGuard

如何使用 Prometheus 監控 WireGuard

如何使用 Prometheus 監控 WireGuard

如何使用 Prometheus 監控 WireGuard

現在還剩下個 WireGuard 沒有監控,下面就來看看如何使用 Prometheus 來監控 WireGuard

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

  • WireGuard 教程:WireGuard 的工作原理

  • WireGuard 快速安裝教程

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

  • Wireguard 全互聯模式(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 組網模式是中心輻射型,建議只需監控 wg 網關,如果是全互聯模式,也可以只監控其中一個用來生成配置的節點,當然你也可以監控所有節點。

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

# 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 監控

kube-prometheus 的部署方式這里略過,新手請自己查閱文檔部署,我只講關鍵的步驟。要想讓 kube-prometheus 能獲取到 WireGuard 的指標,需要創建相應的 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

使用資源清單創建 ServiceMonitor

$ kubectl apply -f prometheus-serviceMonitorWireguard.yaml

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

如何使用 Prometheus 監控 WireGuard

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

如何使用 Prometheus 監控 WireGuard

如何使用 Prometheus 監控 WireGuard

如何使用 Prometheus 監控 WireGuard

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

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

到此,關于“如何使用 Prometheus 監控 WireGuard”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

威信县| 钦州市| 临汾市| 杨浦区| 抚顺市| 浦江县| 兴安盟| 桓仁| 改则县| 科尔| 农安县| 丹巴县| 原平市| 梁平县| 沁水县| 日土县| 军事| 磐安县| 凤阳县| 永州市| 八宿县| 普安县| 金堂县| 文水县| 丰宁| 敖汉旗| 惠安县| 城固县| 临西县| 策勒县| 岑溪市| 绥棱县| 读书| 泸州市| 牡丹江市| 田阳县| 乾安县| 毕节市| 海伦市| 四会市| 惠水县|