2020年12月22日 星期二

docker prometheus 儲存資料設定

當使用docker執行prometheus 有一個問題是

當有更改設定檔或是重新啟動服務

所有的資料就都清空了

要確保資料可以長久保留下來

需要將儲存資料的目錄mount到host上的資料夾


在prometheus內資料是存放在container內的 /prometheeus/data目錄下

通常docker container透過volume 去mount指定目錄就可以

但可能會遇到目錄的權限問題

open data/queries.active: permission denied


必須要將mount的host目錄權限設定與執行promethus的使用者權限才可以

譬如說我在docker compose設定以root來執行promethus

則要mount的目錄的owner 就必須要是root


 docker-compose.yml內容  
 version: '3.8'  
 services:  
  prometheus:  
   image: prom/prometheus:latest  
   user: "0:0"  
   container_name: prometheus99  
   restart: always  
   volumes:  
    - /home/ozzy/docker_share/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro  
    - /home/ozzy/docker_share/prometheus/prometheus_data:/prometheus  
   environment:  
    - GO15VENDOREXPERIMENT=1  
   command:  
    - '--config.file=/etc/prometheus/prometheus.yml'  
   ports:  
    - '9090:9090'  
說明
通常我會使用ansible來管理docker的佈署與更新
先將需要維護的設定檔 透過ansible 由開發本機複製到遠端主機host的指定目錄下
接下來再經由docker container mount volume到這指定的目錄下
來達到docker的資料管理都可以在遠端的host上

個人在這個地方卡了一些時間是因為
使用ansible在遠端主機上建立目錄
是指定了become: true也就是使用root建立
但在docker-compose內我並沒有特別設定執行的user
因次premethus是使用遠端主機登入的使用者ozzy執行
造成了寫紀錄的目錄與執行service是不同使用者而
造成權限問題
docker-compose設定的使用者是以設定UID
如果要查uid 可以使用以下指令
顯示目前使用者uid
echo $UID

顯示所有使用者id

 awk -F: '{printf "%s:%s\n",$1,$3}' /etc/passwd  

如果要進入promethus container內 注意 內部並沒有bash 需要改呼叫sh


docker exec -it grafanaContainer sh

沒有留言: