當使用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
沒有留言:
張貼留言