ติดตั้งและลอง start Prometheus server
Tags: prometheus, devops, programming
Published: 2021-01-28 00:46:58

วันนี้ลองทำตาม document ของ Prometheus กันต่อ ที่หัวข้อ [First steps with Prometheus ](https://prometheus.io/docs/introduction/first_steps/)

ผมก็เลือกติดตั้งแบบที่ใน document บอกเลยคือโหลด tar.gz ของผมใช้บน macOS ก็เป็นไฟล์ `prometheus-2.24.1.darwin-amd64.tar.gz` พอแตกออกมาในนั้นเราก็จะเห็นไฟล์เหล่านี้

```
$ ls -l
-rw-r--r--@ 1 john  staff     11357 Jan 20 09:08 LICENSE
-rw-r--r--@ 1 john  staff      3420 Jan 20 09:08 NOTICE
drwxr-xr-x@ 4 john  staff       128 Jan 20 09:08 console_libraries
drwxr-xr-x@ 9 john  staff       288 Jan 20 09:08 consoles
drwxr-xr-x  6 john  staff       192 Jan 28 07:21 data
-rwxr-xr-x@ 1 john  staff  89422064 Jan 20 07:20 prometheus
-rw-r--r--@ 1 john  staff       926 Jan 20 09:08 prometheus.yml
-rwxr-xr-x@ 1 john  staff  79455632 Jan 20 07:22 promtool
```

ตัวที่เป็นโปรแกรมที่ให้มาก็คือ `prometheus` กับ `promtool`

การจะรัน server ขึ้นมาต้องกำหนดไฟล์ config ให้ด้วยซึ่งก็จะเห็นไฟล์ config มีมาให้แล้วคือ `prometheus.yml` สิ่งที่อยู่ในไฟล์ config ที่ให้มาเป็นแบบนี้

```yaml
# my global config
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).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
```

ที่เข้าใจจากที่อ่านมาคือ `scrape_interval` ไว้กำหนดความถี่ว่าให้ prometheus เรียกไปอ่าน metrics จาก target ถี่แค่ไหน ซึ่งตอนนี้กำหนดไว้ทุกๆ 15 วินาที

ส่วนตรง scrape_configs ให้เรากำหนด target ที่จะไปดึงค่า metrics ตอนนี้คือกำหนดให้ไปเรียกที่ตัว prometheus server เองนั่นแหละ (คือตัว server มันเองก็พ่น metrics ออกเหมือนกัน) ที่ endpoint `localhost:9090` default path คือ `/metrics`

ลองสั่ง start server ด้วยวิธีนี้

```
$ ./prometheus --config.file=prometheus.yml
...
level=info ts=2021-01-28T00:35:44.150Z caller=main.go:710 msg="Server is ready to receive web requests."
```

สุดท้ายเมื่อเห็น log ว่า server พร้อมแล้วก็ลองเปิด browser เข้าไปที่ http://localhost:9090 จะเจอหน้าเว็บแบบนี้

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/gf9m12wl6dzu5ry4gh7a.png)

สำหรับตอนนี้ target คือตัวมันเอง ดังนั้นถ้าเราเข้าที่ http://localhost:9090/metrics จะเห็น text ที่เป็น metrics ของตัวมันเองที่จะถูกมาอ่านทุกๆ 15 วินาทีแบบนี้

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/moz29wjtzi0egbfxbfk5.png)

จากนั้นสิ่งที่เราทำได้คือใส่ Expression คือดึงข้อมูล metrics มาโชว์นั่นเอง ผมยังไม่เข้าใจเรื่อง Expression ที่ใช้ แต่ก็ลองใส่ตาม document First Step ดู 4 แบบจะแสดงข้อมูลและกราฟแบบนี้

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/dlu5i9pkd7ufv16b3rd3.png)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/jyxpxr6rd2l6g1fxll4n.png)

ตอนต่อๆไปค่อยมาดูเรื่องวิธีการรวบรวม metrics กับการใช้ PromQL ในการ query ข้อมูลกันอีกที

<a href="https://www.buymeacoffee.com/weerasak" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>