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

猜你喜欢

转载自blog.csdn.net/u014108439/article/details/82186143