graphite未接收到數據,carbon-cache.py 開啓報錯:carbon-cache (instance a) is already running with pid 20

使用graphite已經一段時間了,今天遇到了一個問題,連接不上2003端口了。經過一番排查,解決了這個問題,過程特此記錄下。

我是通過docker運行的,指定的命令如下:

sudo docker run -d -p 80:80 -p 81:81 -p 2003:2003 -p 8125:8125/udp -p 8126:8126 --restart=always  --name kamon-grafana-dashboard kamon/grafana_graphite

graphite組件之一的carbon的端口開在2003,我映射到了主機的2003端口。

首先,在自己的程序中連接服務器2003端口失敗。在服務器端查看端口開放情況

可以看到主機2003端口是開放的,這個端口是映射到docker容器內部的2003端口上面了。於是進入docker容器內部,查看端口開發情況。

進入docker容器:( -t 後面的bd是docker容器的id)

docker exec -i -t bd /bin/bash

進入後,查看端口

可見,2003端口對應的carbon進程沒開啓來。

這個容器是通過supervisor來管理graphite的各個進程的。

於是查看supervisor配置腳本。打開/etc/supervisor/conf.d/supervisord.conf:

[supervisord]
nodaemon = true
environment = GRAPHITE_STORAGE_DIR='/opt/graphite/storage',GRAPHITE_CONF_DIR='/oo
pt/graphite/conf'

[program:nginx]
command = /usr/sbin/nginx
stdout_logfile = /var/log/supervisor/%(program_name)s.log
stderr_logfile = /var/log/supervisor/%(program_name)s.log
autorestart = true

[program:carbon-cache]
;user = www-data
command = /opt/graphite/bin/carbon-cache.py --pidfile /var/run/carbon-cache-a.pii
d --debug start
stdout_logfile = /var/log/supervisor/%(program_name)s.log
stderr_logfile = /var/log/supervisor/%(program_name)s.log
autorestart = true

[program:grafana-webapp]
;user = www-data
directory = /opt/grafana/
command = /opt/grafana/bin/grafana-server

找到carbon-cache的執行命令,手動執行一下:

 

得到錯誤信息:carbon-cache (instance a) is already running with pid 20

因爲carbon-cache.py執行時指定了pidfile,所以它在啓動時去讀取/var/run/carbon-cache-a.pid,發現已有pid。所以它認爲已經開了一個carbon-cache進程了,就報了這個錯誤。

但實際並沒有carbon-cache進程,應該是上次carbon-cache異常關閉,導致這個pid文件未刪除。

所以我們刪掉這個pid文件就行了。

刪掉這個文件,使用supervisorctl重新開啓,然後這個carbon-cache就起來了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章