Peta dunia

 

EN: Read in English

Dunia O4: Diari & Satu Pesanan

Misi capstone 9: Pantau Kedai Kancil

Anda akan belajar: jalankan bilik kawalan sendiri untuk Kedai Kancil: Prometheus, Grafana, node-exporter, satu amaran dan satu dashboard.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Prometheus 3 pada 1 Nov 2026

Masalahnya

Misi 9: pantau Kedai Kancil! Anda akan bina bilik kawalan kecil dalam folder monitoring/. Mula-mula, letak setiap fail di tempatnya.

Seret kad ke dalam kotak. Atau ketik kad, kemudian ketik kotak.

        Tengok

        node-exporter tiada baris ports. Macam mana Prometheus sampai kepadanya?

        Pilih satu jawapan.

        services:
          prometheus:
            image: quay.io/prometheus/prometheus:v3.13.5
            volumes:
              - ./prometheus:/etc/prometheus:ro
            ports: ["9090:9090"]
          node-exporter:
            image: quay.io/prometheus/node-exporter:v1.12.1
          grafana:
            image: grafana/grafana:13.2.5
            volumes:
              - ./grafana/provisioning:/etc/grafana/provisioning:ro
              - ./grafana/dashboards:/var/lib/grafana/dashboards:ro
            ports: ["3000:3000"]

        Tengok

        Uji query panel “Targets up” dulu. Jadikan ia satu nombor.

        Taip query PromQL, kemudian tekan Jalankan. Jadual papar jawapan pada masa nilai. Graf papar jawapan sepanjang masa.

        Metric dalam data ini (tekan untuk tambah):

        Masa 0 ialah saat data bermula. Query melihat ke belakang dari masa nilai.

        {
          "uid": "kedai",
          "title": "Kedai Kancil",
          "panels": [
            { "type": "stat", "title": "Targets up",
              "gridPos": { "x": 0, "y": 0, "w": 6, "h": 6 },
              "targets": [{ "refId": "A", "expr": "sum(up)" }] },
            { "type": "timeseries", "title": "CPU busy (%)",
              "gridPos": { "x": 6, "y": 0, "w": 18, "h": 6 },
              "targets": [{ "refId": "A", "expr": "100 * (1 - avg(rate(node_cpu_seconds_total{mode=\"idle\"}[$__rate_interval])))" }] }
          ]
        }

        Tengok

        Grafana berjalan dalam container sendiri. Kenapa sumber data tulis http://prometheus:9090, bukan localhost?

        Pilih satu jawapan.

        # grafana/provisioning/datasources/prometheus.yaml
        apiVersion: 1
        datasources:
          - name: Prometheus
            type: prometheus
            uid: prometheus
            url: http://prometheus:9090
            access: proxy
            isDefault: true
        # grafana/provisioning/dashboards/kedai.yaml
        apiVersion: 1
        providers:
          - name: kedai
            folder: Kedai Kancil
            type: file
            options:
              path: /var/lib/grafana/dashboards

        Cuba

        prometheus.yml ini scrape localhost:9100. Dalam container Prometheus, tiada apa mendengar di situ. Halakan job node ke node-exporter.

        Ubah YAML ini. Kotak di bawah tunjuk cara komputer membacanya.

        prometheus.yml13 baris

        Cara komputer membacanya

        • globalmap · 2 kunci
          • scrape_interval15steks
          • evaluation_interval15steks
        • rule_filessenarai · 1 item
          • item 1rules.ymlteks
        • scrape_configssenarai · 2 item
          • item 1map · 2 kunci
            • job_nameprometheusteks
            • static_configssenarai · 1 item
              • item 1map · 1 kunci
                • targetssenarai · 1 item
                  • item 1localhost:9090teks
          • item 2map · 2 kunci
            • job_namenodeteks
            • static_configssenarai · 1 item
              • item 1map · 1 kunci
                • targetssenarai · 1 item
                  • item 1localhost:9100teks

        Cuba

        Sekarang amaran. Panggil bila mana-mana target mati selama seminit, dan sebut job serta instance.

        Bina rule alert daripada blok. Garis masa papar bila ia menunggu dan bila ia berbunyi.

        Bila (expr)
        Tunggu dahulu (for)
        Label
        Mesej (annotations)
        Rule anda: rules.yml
        groups:
        - name: kedai
        rules:
        - alert: KedaiTargetDown
        expr: up == 0
        annotations:
        summary: Target down
        
        Nilai yang alert perhatikan
        00.250.50.7510s10m20m30mhad 0
        Graf sebagai jadual
        Graf sebagai jadual
        Masaup{instance="db-1", job="db"}up{instance="shop-1", job="shop"}up{instance="shop-2", job="shop"}
        0s111
        1m111
        2m111
        3m111
        4m111
        5m111
        6m011
        7m011
        8m011
        9m111
        10m111
        11m101
        12m101
        13m101
        14m101
        15m101
        16m101
        17m101
        18m101
        19m101
        20m101
        21m101
        22m101
        23m101
        24m101
        25m101
        26m101
        27m101
        28m101
        29m101
        30m101
        31m101

        Apa alert buat sepanjang masa

        Kelabu: senyap. Kuning: pending (benar, tetapi menunggu). Merah: firing.

        • {instance="db-1", job="db"}

          🔔 firing 6m hingga 8m

        • {instance="shop-1", job="shop"}

          🔔 firing 11m hingga 31m

        Pada 12m:

        • FIRING KedaiTargetDown instance="shop-1", job="shop"Target down
        Garis masa sebagai jadual
        Masa{instance="db-1", job="db"}{instance="shop-1", job="shop"}
        0ssenyapsenyap
        1msenyapsenyap
        2msenyapsenyap
        3msenyapsenyap
        4msenyapsenyap
        5msenyapsenyap
        6m🔔 firingsenyap
        7m🔔 firingsenyap
        8m🔔 firingsenyap
        9msenyapsenyap
        10msenyapsenyap
        11msenyap🔔 firing
        12msenyap🔔 firing
        13msenyap🔔 firing
        14msenyap🔔 firing
        15msenyap🔔 firing
        16msenyap🔔 firing
        17msenyap🔔 firing
        18msenyap🔔 firing
        19msenyap🔔 firing
        20msenyap🔔 firing
        21msenyap🔔 firing
        22msenyap🔔 firing
        23msenyap🔔 firing
        24msenyap🔔 firing
        25msenyap🔔 firing
        26msenyap🔔 firing
        27msenyap🔔 firing
        28msenyap🔔 firing
        29msenyap🔔 firing
        30msenyap🔔 firing
        31msenyap🔔 firing

        Cuba

        Sekarang bina betul-betul, langkah demi langkah. Tanda anda disimpan.

        Misi sebenar

        1. mkdir -p monitoring && cd monitoring && mkdir -p prometheus grafana/dashboards grafana/provisioning/datasources grafana/provisioning/dashboards
        2. docker compose config --quiet
        3. docker run --rm --entrypoint promtool -v "$PWD/prometheus:/etc/prometheus:ro" quay.io/prometheus/prometheus:v3.13.5 check config /etc/prometheus/prometheus.yml
        4. docker compose up -d
        5. http://localhost:9090/targets
        6. http://localhost:3000
        7. docker compose stop node-exporter
        8. http://localhost:9090/alerts
        9. docker compose start node-exporter
        10. git add monitoring && git commit -m "Watch the shop" && git push
        11. docker compose down

        0 daripada 12 langkah siap · Tanda anda disimpan.

        Semak

        GitHub boleh nampak fail anda. Taip nama pengguna anda dan tekan Semak sekarang.

        Semak di GitHub

        Nama pengguna anda dihantar ke api.github.com sahaja.

        • Repo kedai-kancil anda awamBelum disemak
        • Ia ada monitoring/compose.yamlBelum disemak
        • Ia ada config PrometheusBelum disemak
        • Ia ada alert ruleBelum disemak
        • Ia ada dashboardBelum disemak

        Semak

        Selebihnya hanya anda boleh nampak. Tanda yang benar.

        Semakan diri

        0 daripada 5 langkah siap · Tanda anda disimpan.

        Anda berjaya!

        Kini anda boleh jalankan bilik kawalan kecil: metrik, dashboard dan amaran.

        Nak tahu lebih (pilihan)

        Di mana cerita ini tak tepat. Bilik kawalan sebenar memantau dari luar. Bilik kita berjalan di mesin yang dipantaunya. Jika mesin itu mati, loceng pun mati. Dalam container, node-exporter nampak cakera dan rangkaian container sendiri. README-nya tunjuk mount hos untuk mesin sebenar. Seterusnya: tambah Alertmanager, supaya loceng sampai ke telefon.