Keywords: How to install Prometheus and Grafana on Ubuntu by handmade and docker-compose
Đã rất lâu rồi mình chưa viết được bài Blog nào vì công việc đã thay đổi, mình đã không còn làm việc tại Sutrix nữa, gắn bó nơi đó cũng gần 2 năm trời nhiều kỉ niệm, thế nhưng tiệc nào rồi cũng sẻ đến lúc tàn, mình cần đi để học hỏi nhiều thứ mới mẻ hơn và cũng nhờ đều đó mà mình đã tìm hiểu được hệ thống Prometheus và Grafana nhìn chung thì nó cũng khá giống với Nagios nhưng cùng theo sau mình để tìm hiểu về nó nhé.
Tại sao phải thực hiện 2 cái này chung bởi vì các bạn hiểu rằng Prometheus có nhiệm vụ Query và Alert chấp nhận metrics để thực hiện theo dõi và Grafana sẻ lấy giá trị từ Prometheus cũng như Alert từ Prometheus để dễ dàng thực hiện hơn bằng giao diện trực quan đẹp mắt hơn, chưa kể ở Grafana có các Chart nhìn đẹp mắt dễ dàng phân tích hơn, vì vậy 2 thằng này trở thành bộ đôi hoàn hảo là vậy, ok không nói nhiều nữa chúng ta sẻ bắt đầu thực hiện luôn vậy.
Phần 1: Thực hiện Download Prometheus tại đây nhé
Mình sử dụng lệnh wget để thực hiện download như sau
wget https://github.com/prometheus/prometheus/releases/download/v2.22.0-rc.0/prometheus-2.22.0-rc.0.linux-amd64.tar.gz
Trên đó cũng có rất nhiều exporter có sẵn cho các bạn lựa chọn
Chắc rằng nhiều bạn cũng sẻ suy ngẫm exporter là gì đúng không, thì theo như mình hiểu exporter là một source code chứa các metrics để export value ra ngoài, để mình lấy ví dụ từ exporter của solr của mình cho các bạn hiểu nhé, như hình nó sẻ là source code như thế này
Ở đây file solrtopic.xml chính là config nơi chứa các đoạn code metrics để giúp Prometheus get value ra, khi mình chạy lệnh config cho source code trên như saucd contrib/prometheus-exporter $ ./bin/solr-exporter -p 9854 -b http://localhost:8983/solr -f ./conf/solr-exporter-config.xml -n 8
Nó sẻ thực thi file config của solr với link http://localhost:8983/solr để lấy giá trị từ solr này với port 9854 nghĩa là khi mình truy cập ip với port 9854 sẻ ra giao diện của trang quản lý metrics như sau, thường source này dùng json là chủ yếu nói chung code nào cũng được miễn ra trang metrics vậy là ok
Chắc rằng các bạn sẻ hỏi ủa vậy cái solr_metrics_jetty_response_total nó ở đâu mà tại sao khi chạy config nó lại ra ? chính là file config lúc nảy mình nói ở trên đấy code query config nằm trong đó kiểu như hình dưới
Ok quay lại phần download lúc nảy chúng ta thực hiện giải nén file đã downloadtar xvfz prometheus-*.tar.gz cd prometheus-*
sau khi giải nén xong chúng ta sẻ được như sau, thực hiện tiếp dời prometheus và promtool để làm service
cp prometheus promtool /usr/local/bin/
Sau đó thực hiện chạy các lệnh sau để check coi đã có environment hay chưa nhé
Bây giờ để muốn start Prometheus thì chúng ta chỉ cần chạy câu lệnh sau nữa là ổn./prometheus --config.file=prometheus.yml
Ok sau khi nó chạy như sau thì các bạn thực hiện truy cập link với port 9090 để check coi Prometheus đã chạy chưa nhé
Ok như vậy coi như các bạn đã gần xong phần Prometheus rồi đấy nhưng ai mà lại để Prometheus vậy mà chạy, các bạn nên tạo cho nó 1 cái service như bài viết sau của mình
Link: https://www.itblognote.com/2019/12/huong-dan-tao-va-chay-file-script-nhu.html
Tại đây mình cũng sẻ làm y chang cái bài viết trên nên mình sẻ không giải thích gì nhiều thêm
cd /etc/systemd/system/ sudo vi prometheus.serviceChèn đoạn code sau vào trong file prometheus.service
[Unit] Description=prometheus-server [Service] User=root WorkingDirectory=/data/prometheus/prometheus-2.22.0-rc.0.linux-amd64 ExecStart=/data/prometheus/prometheus-2.22.0-rc.0.linux-amd64/prometheus --config.file=prometheus.yml SuccessExitStatus=143 TimeoutStopSec=10 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
Chú ý lại những cái cần chỉnh sửa mà mình tô màu lên trên nhé, sau đó thực hiện tiếp 3 lệnh sau
sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus
Sau khi mọi thứ như vậy nghĩa là ok rồi đó
mặc định prometheus.yml chỉ có như thế và không có gì thêm cả, ngay cả phần alerting cũng chưa có đợi sau này khi mình cần nhận thông báo thì mình sẻ cấu hình thêm thằng này
Các bạn chú ý phần scrape_configs: đây sẻ là nơi ta add các exporter vào đấy, để nó nhận các metrics thì hiện tại nó đã có sẵn 1 exporter đó là của thằng Prometheus này luôn, nên các bạn thực hiện lên Prometheus để test nào, tại đây mình chọn đại 1 metrics đầu tiên đi và thấy rằng nó đã get value thành công rồi, giờ nếu như các bạn muốn theo dõi thêm cái gì nữa thì chỉ cần add thêm exporter của cái đó vào thôi ví dụ là solr chẳng hạn
Sau đây là một mẫu config exporter solr mà mình add vào config của prometheus.yml như sau
- job_name: 'solr' scrape_interval: 5m scrape_timeout: 300s #Duong dan den metrics con neu khong co thi cac ban nen xoa no di metrics_path: /metrics static_configs: - targets: ['YourIP:YourPort']
Giả sử link metrics mình là http://localhost:9854/metrics thì mình để path là /metrics còn nếu như nó chỉ là http://localhost:9854 thì mình sẻ ẩn nó đi và chỉ để IP và Port thôi và đơn nhiên như mình nói ở trên việc lấy giá trị là ở thằng metrics gọi chung là exporter, còn thằng prometheus chỉ để show ra cho chúng ta 1 cách dễ dàng hơn chưa kể prometheus có thể giúp chúng ta tính toán bằng các query function của nó nữa, các bạn có thể tham khảo link sau để biết về query của prometheus nhiều hơn nhé, nó cũng như excel bình thường với các hàm đơn giản ak
Link Query Function: https://prometheus.io/docs/prometheus/latest/querying/functions/
Ok coi như phần Prometheus mình đã giới thiệu và giải quyết xong bây giờ chúng ta sẻ đến với Grafana nhé, đơn nhiên prometheus thì với giao diện đơn giản chúng ta vẫn chưa thể quản lý nhiều với nó được, để có giao diện tốt hơn rõ ràng hơn thì chúng ta phải cần đến Grafana
Phần 2: Grafana cho Prometheus
Đối với Grafana việc cài đặt diễn ta tốt hơn nhiều chỉ cần các bạn làm theo các lệnh sau
sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list sudo apt-get update sudo apt-get install grafana
Sau khi cài xong các bạn thực hiện chạy tiếp 3 câu lệnh sau để open service lên và thực hiện truy cập để đổi pass grafana
systemctl daemon-reload systemctl enable grafana-server systemctl start grafana-server
Sau đó truy cập với tài khoản và pass là admin với port 3000 như vậy là xong rồi đó
Bây giờ chúng ta sẻ quay về thằng prometheus để thực hiện 1 chút vấn đề cho các bạn hiểu được nữa nhé nó có hơi liên quan tới grafana 1 chút, như các bạn đã thấy mình đã lựa chọn metrics go_gc_duration_seconds để chạy thử và ra như hình
Nó sẻ ra 5 giá trị thế rồi các bạn tự ngẫm mẹ bà thằng metrics code nó đã làm hết rồi vậy thằng prometheus này nó có khác gì thằng grafana đâu cũng chỉ show value lên, sai rồi nhé vì nó có 1 phần rất đặc biệt đó là query function như mình nói ở trên, ở đây mình thử tính tổng của 5 giá trị này nhé vì thế mình sẻ thực hiện hàm sum()
Giờ bạn đã hiểu được ý nghĩa của thằng Prometheus này rồi chứ nhưng ai mà lại đi lấy Prometheus quản lý với nhìn basic như thế được, giờ là ta phải sử dụng Grafana, mới trực quan hơnĐể sử dụng Grafana để quản lý thì ta cần add Prometheus vào Grafana đã các bạn đi đến cài đặt và chọn data source nhé chọn add data source và thêm Prometheus vào
Sau đó thực hiện tạo Dashboard Prometheus như sau
Chọn tiếp Add Panel và thực hiện query như trên Prometheus ta làm hồi nảy
Sau đó chúng ta add Metrics vào phần Metrics như sau
Đấy mình đã xong 1 bản theo dõi rồi đấy giờ mình sẻ tạo thêm 1 bản sum nữa nhé
Còn nhiều Chart khác nữa như kiểu Pie hay là số v.v thì các bạn chỉ cần vào phần cài đặt add thêm plugin vào nữa là sẻ ra rất nhiều kiểu chart cho các bạn lựa chọn trong quá trình công việc nếu có yêu cầu, như vậy là mình đã hướng dẫn xong cho các bạn về Prometheus và Grafana rồi đấy, nếu các bạn muốn nhanh thì có thể sử dụng file docker-compose.yaml sau của mình, thực hiện tạo network cho docker monitor và dùng file sau để chạy, đều kiện phải có docker
docker network create monitor-net
Thực hiện tạo file docker-compose.yaml và file prometheus.yml lần lượt với nội dung như sau
version: '3.3' networks: monitor-net: external: true services: prometheus: image: prom/prometheus container_name: prometheus ports: - "1000:9090" volumes: - /data/prometheus/docker/config-prometheus:/etc/prometheus networks: - monitor-net grafana: image: grafana/grafana container_name: grafana restart: on-failure ports: - "1001:3000" networks: - monitor-net
Chạy tiếp lệnh sau để tạo file trong thư mục ta mount cho docker-compose touch /data/prometheus/docker/config-prometheus/prometheus.yml
# 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']
Sau đó chạy lệnh
docker-compose up
Chúc các bạn thành công !
Nguồn: itblognote.com
0 Comments
Vài lời muốn nói:
* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.
* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.
* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.