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