Рубрики
Uncategorized

Я построил машину Rube Goldberg, чтобы контролировать моего курильщика, используя K8s, Prometheus и Grafana 🍖🍖🍖🍖

Или: как вы можете использовать мощность Kubernetes и хороший стек мониторинга, чтобы сделать практически … Tagged с мониторингом, Kubernetes, DevOps, ShowDev.

Или: как вы можете использовать мощность Kubernetes и хороший стек мониторинга, чтобы делать практически все

Я только что получил курильщик, и допустим, что я пошел за это. Ну, не ветчина, но у меня была вещь в течение 6 недель, и я сделал 5 кроттин. Каждый становится немного лучше, и я скажу, что опыт курения мяса довольно весело; Есть тонна, на которую вы должны обратить внимание, и вы хотите внести небольшие коррективы, не позволяя что -то слишком драматично.

Наряду с курильщиком я также получил Igrill V2. Это фактически термометр Bluetooth, который имеет как мясо, так и датчики температуры окружающей среды. У Igrill есть приложение, которое позволяет вам делать некоторые основные вещи Но вы привязаны к линейке Bluetooth маленького устройства, который довольно маленький, может быть, примерно 30 футов в хороший день. Это означало, что я даже не мог ходить по своему дому и при этом получить температуру и оповещения от термометра.

Наша цель

Создайте простой способ контролировать температуру курильщика в реальном времени из любого места.

Наш технический стек

Наше решение

Во -первых, нам нужно подключить Igrill к чему -то другому, кроме телефона. У меня есть горстка из Raspberry Pi B+, которая должна работать отлично. У них встроенный Bluetooth и Btle.

Некоторые люди уже сделали тяжелую работу, когда дело доходит до разговора с IGRILL, Это репо от Bjoernhoefer Выглядит хорошо, так что давайте начнем там.

import time

from igrill import IGrillV2Peripheral
from prometheus_client import Gauge, push_to_gateway, CollectorRegistry

registry = CollectorRegistry()
probe_one = Gauge('bbq_probe_one_temp', 'Temp of probe one', registry=registry)
probe_two = Gauge('bbq_probe_two_temp', 'Temp of probe two', registry=registry)
probe_three = Gauge('bbq_probe_three_temp', 'Temp of probe three', registry=registry)
probe_four = Gauge('bbq_probe_four_temp', 'Temp of probe four', registry=registry)

probes = [ probe_one, probe_two, probe_three, probe_four ]
battery = Gauge('bbq_battery', 'Battery of the iGrill', registry=registry)

if __name__ == '__main__':
    periph = IGrillV2Peripheral('XX:XX:XX:XX:XX:XX')
    while True:

        temperature=periph.read_temperature()

        # Probe 1
        if temperature[1] != 63536.0:
            print("bbq/probe1", temperature[1])
            probe_one.set(temperature[1])

        # Probe 2
        if temperature[2] != 63536.0:
            print("bbq/probe2", temperature[2])
            probe_two.set(temperature[2])

        # Probe 3
        if temperature[3] != 63536.0:
            print("bbq/probe3", temperature[3])
            probe_three.set(temperature[3])

        # Probe 4
        if temperature[4] != 63536.0:
            print("bbq/probe4", temperature[4])
            probe_four.set(temperature[4])

        print("bbq/battery", periph.read_battery())
        battery.set(periph.read_battery())
        push_to_gateway('https://grillstats-url', job="igrill", registry=registry )

        time.sleep(5)

Нам не нужен сервер MQTT. Вместо этого мы можем добавить GateTheus Gateway в наш кластер Kubernetes и подтолкнуть наши метрики прямо там.

Теперь давайте настроем нашего оператора Prometheus с помощью коляска, который готов к получению метрик.

В файле value.yaml мы добавляем

  -
    prometheus:
      additionalServiceMonitors:
        -
          name: igrill-monitor
          selector:
            matchLabels:
              app: prometheus-pushgateway
          namespaceSelector:
            matchNames:
              - metrics
          endpoints:
            -
              honorLabels: true
            -
              port: '9091'
            -
              targetPort: '9091'
              interval: 5s

Это говорит Prometheus, что он должен очистить новые конечные точки.

Наконец, давайте настроем Ворота Прометея, чтобы дать нам место, чтобы подтолкнуть метрики. Мы используем руль для развертывания Gateway Prometheus.

Мы можем документировать все это с помощью Helmfile :

  releases:
  - name: metrics
    namespace: metrics
    chart: stable/prometheus-operator
    values:
      - prometheus-node-exporter:
          service:
            port: 30206
            targetPort: 30206
      - prometheus:
          additionalServiceMonitors:
            - name: igrill-monitor
              selector:
                matchLabels:
                  app: prometheus-pushgateway
              namespaceSelector:
                matchNames:
                  - metrics
              endpoints:
                - honorLabels: true
                - port: "9091"
                - targetPort: "9091"
                  interval: 5s
  - name: push-gateway
    namespace: metrics
    chart: stable/prometheus-pushgateway

Простой Helmfile Sync развертывает все.

Теперь мы можем настроить диаграммы в Графане:

И, конечно же, гламурный снимок конечного продукта! За все, что мне потребовалось около 14 часов, чтобы курить, и людям это понравилось!

Оригинал: «https://dev.to/focusedlabs/i-built-a-rube-goldburg-machine-to-monitor-my-smoker-using-k8s-prometheus-and-grafana-5c59»