---
# System prepended metadata

title: 40長照啟動辦法

---

**40長照啟動辦法**

到docker這個資料夾裡啟動:

`docker-compose up -d`

之後會報一個unhealthy的錯誤，遇到時只要等前一個容器健康後在docker-compose up -d一次就好。

可用docker ps檢查容器是否健康(通常我等1分鐘)

**Prometheus監控系統**

在你要用來監控(非被監控)的機器上安裝prometheus
以下使用Linux作為範例:

到官網下載Linux用的prometheus包
[https://prometheus.io/download/](https://)

將安裝包移至你想要的目錄，在該目錄下解壓縮:
```
tar -xvzf prometheus-<version>.tar.gz
```

該目錄下會默認有配置檔prometheus.yml，請根據需要修改。
最上面的global是參數設定，例如:

scrape_interval 定義了 Prometheus 從目標（例如應用程序、服務）抓取度量數據的時間間隔。

evaluation_interval 定義了 Prometheus 評估規則的時間間隔。規則可以包括警報規則、記錄規則等。

```
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).
```

重點是一個job，以cadvisor為例，

```
  - job_name: 'cadvisor'
    scrape_interval: 10s
    metrics_path: '/metrics'
    static_configs:
      - targets: ['cadvisor_ip:port']
        labels:
          group: 'cadvisor'
```


job_name: 為任務取名以做辨識。

scrape_interval: 定義了 Prometheus 抓取度量數據的時間間隔。

metrics_path: 指定了 Prometheus 從目標獲取度量數據的路徑，這里是 '/metrics'。通常，各種應用程序和服務都會將其度量數據公開在特定的路徑上，Prometheus 使用該路徑來獲取數據。

static_configs: 用於指定 Prometheus 應該從哪里抓取數據。舉例，目標是 '10.20.1.40:8080'，表示 cAdvisor 應用程序的地址為 10.20.1.40，監聽端口為 8080。

labels: 這里設置了一個標簽，將這個目標標記為屬於 'cadvisor' 組。標簽的使用可以幫助你更好地組織和查詢你的度量數據。

**prometheus啟動辦法:**
在prometheus目錄直接下
`./prometheus`
就會啟動並默認讀取該目錄下的yml，如果遇到問題就要加參數例如:
```
./prometheus --config.file=prometheus.yml
```

**Cadvisor架設**

Cadvisor則是要裝在被監控的機器上。


直接寫在docker-compose來一併啟用，請注意port號的部分，prometheus.yml job的targets追蹤的就是該port號。

```
  cadvisor:
    image: gcr.io/cadvisor/cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - "8080:8080"
    container_name: cadvisor
```

這邊注意volumes:他掛載了一些目錄到 cAdvisor 容器，這是為了讓 cAdvisor 能夠監主機的各種資源。

/:/rootfs:ro: 掛載宿主機的根目錄，用於獲取根文件系統的信息，以唯讀模式掛載（ro表示read-only）。

/var/run:/var/run:rw: 掛載宿主機的 /var/run 目錄，用於訪問容器的運行時信息，以讀寫模式掛載。

/sys:/sys:ro: 掛載宿主機的 /sys 目錄，用於獲取系統信息，以唯讀模式掛載。

/var/lib/docker/:/var/lib/docker:ro: 掛載宿主機的 Docker 數據目錄，以唯讀模式掛載，用於獲取 Docker 相關的信息。

不用compose也可直接用命令，或是不用docker安裝也可。
```
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --name=cadvisor gcr.io/cadvisor/cadvisor
```
成功啟動後能上頁面查看，默認8080

**prometheus頁面**
Cadvisor裝好後起動prometheus並到頁面查看，默認9090。


**grafana**

視覺化套件，這跟prometheus裝在一起即可，也可裝在任何機器連接prometheus。

```
docker run -d -p 7070:3000 --name=grafana grafana/grafana-enterprise
```

我給了7070這個port，到localhost:7070。


帳密:admin

能看到cpu 記憶體 網路
![grafana1](https://hackmd.io/_uploads/Byzz5I7N6.png)

**附錄**

待辦:

熱更新prometheus處理

參考文章:
https://sectools.tw/docker-monitor/

grafana無法登入帳號問題:
https://stackoverflow.com/questions/71140109/grafana-cannot-login-to-http-localhost3000-login

**app訊息測試流程**
使用app發送測試訊息:
對外ip:211.20.7.116

c使用mosquitto發送測試訊息，進入mosquitto容器或你電腦安裝的mosquitto。

`mosquitto_pub -h mosquitto -t sensor/Test/room1 -m "10,200,林阿嬤,1,12345"`

進入到40桌面docker_log這個資料夾，查看mosquitto.log這隻檔案有無收到資料:
```
sudo cat mosquitto.log
```
![mosquitto2023-12-05 152753](https://hackmd.io/_uploads/B1NyMU3ra.png)

一樣的地方，查看查看python_kafka_當天日期.log這隻檔案有無收到資料:

```
sudo cat python_kafka_當天日期.log
```
![kafka 2023-12-05 152946](https://hackmd.io/_uploads/Sy28f8hr6.png)

前往db看資料有無存進去，需要一些時間:
```
mycli -u test -h 127.0.0.1

# 密碼：12345

use fcts

select * from punch
select * from gps
```
