使用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就起來了。