昨日のこれ
自分の発表では prometheus 形式で export したら Datadog の Kubernetes Autodiscovery で datadog-agent が勝手に取ってくれて便利だよなんて言ったんですが
prometheus 形式で export するのに個別にタグつけて export できないと思ってたんですが
In addition to the fundamental metric types Gauge, Counter, Summary, and Histogram, a very important part of the Prometheus data model is the partitioning of samples along dimensions called labels, which results in metric vectors. The fundamental types are GaugeVec, CounterVec, SummaryVec, and HistogramVec.
できる(できる)
ということを8億年前から知っていた @yuya-takeyama に教えてもらったので書き直しました。一応前のは残して別の repository に書きました。
つぎはぎだらけでだいぶ雑な気がしますがまぁ動いているからいいのだ。
これは何
prometheus 形式で Github の指定した repository の pull request の数を author, reviewer, label をタグとしてつけて export する君です。
こっちは push のアプローチで、この中で Datadog に対して metrics を投げつけるんですが、
今回作った github-pr-prometheus-exporter は Datadog 関係ないです。prometheus 形式で、 8080:/metrics
で metrics を export するだけ。
で、こういう annotation 書けば datadog-agent が取ってくれるので便利。pull 型のアプローチですね。使ってる manifest そのまま晒しちゃいます。
apiVersion: apps/v1 kind: Deployment metadata: name: github-pr-prometheus-exporter namespace: monitor labels: name: github-pr-prometheus-exporter owner: sre spec: replicas: 1 selector: matchLabels: app: github-pr-prometheus-exporter template: metadata: labels: app: github-pr-prometheus-exporter annotations: ad.datadoghq.com/github-pr-prometheus-exporter.check_names: | ["prometheus"] ad.datadoghq.com/github-pr-prometheus-exporter.init_configs: | [{}] ad.datadoghq.com/github-pr-prometheus-exporter.instances: | [ { "prometheus_url": "http://%%host%%:8080/metrics", "namespace": "github-pr-prometheus-exporter", "metrics": ["*"] } ] spec: containers: - image: chaspy/github-pr-prometheus-exporter:v0.1.0 name: github-pr-prometheus-exporter ports: - name: http containerPort: 8080 livenessProbe: initialDelaySeconds: 1 httpGet: path: /metrics port: 8080 resources: limits: memory: 32Mi requests: cpu: 10m memory: 32Mi env: - name: GITHUB_TOKEN valueFrom: secretKeyRef: name: "github-secret" key: GITHUB_TOKEN - name: GITHUB_REPOSITORIES value: "quipper/kubernetes-clusters,quipper/server-templates,quipper/monorepo,quipper/monorepo-global,quipper/qs-terraform,quipper/aya-terraform,quipper/iam,quipper/aya-iam,quipper/dns,quipper/aya-dns" securityContext: readOnlyRootFilesystem: true securityContext: runAsNonRoot: true runAsUser: 1000 imagePullSecrets: - name: docker-hub affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: quipper/type operator: In values: - system-components
別に push 方式でも全然いいんですが、Datadog 関係の secret を持つ必要がないって点が利点ですかね。
前作と同じく環境変数 GITHUB_REPOSITORIES
で対象リポジトリを指定します。
- name: GITHUB_REPOSITORIES value: "quipper/kubernetes-clusters,quipper/server-templates,quipper/monorepo,quipper/monorepo-global,quipper/qs-terraform,quipper/aya-terraform,quipper/iam,quipper/aya-iam,quipper/dns,quipper/aya-dns"
もはやこれを deployment として浮かせることすらしたくない(どっかのサーバレスな何かに image だけ指定していい感じに動いて欲しい)ぐらいには怠惰になってきた。
まぁ何はともあれ、push 形式の前作を cronjob で定期実行するよりはこっちのアプローチのほうがいいかなと思い書き直したという話でした。
次こそはこれの issue ver を作る。