使用Python logger的SocketHandler直接记录到carbon(graphite)?

0 投票
1 回答
872 浏览
提问于 2025-04-17 03:43

我尽力通过SocketHandler直接把数据记录到carbon里,但没成功:

logger.conf的内容是:

[loggers]
keys=root,carbon

[handlers]
keys=carbonHandler

[formatters]
keys=carbonFormatter

[logger_carbon]
level=DEBUG
handlers=carbonHandler
qualname=carbon
propagate=0

[logger_root]
level=DEBUG
handlers=carbonHandler

[handler_carbonHandler]
class=logging.handlers.SocketHandler
level=DEBUG
formatter=carbonFormatter
args=('$HOST', 2003)

[formatter_carbonFormatter]
format=%(message)s %(created)i

然后,我试着用这个记录数据:

import logging
import logging.config

logging.config.fileConfig('logging.conf')

logger = logging.getLogger('carbon')
logger.info('test.python 42')

结果很遗憾,失败了...

不过我可以用这个命令和carbon通信:echo "test.metric 42 $(date +'%s')" | nc $HOST 2003

你能看出问题吗?

我是不是在尝试一些根本行不通的事情?

谢谢你的帮助!

1 个回答

0

假设你的配置文件和现在的一模一样——把配置文件里的“$HOST”替换成实际的主机名。这样做会发生什么呢?如果这样可以正常工作,但你又希望这个名字能根据环境变化,那就试试在配置文件里使用

args=(os.environ['HOST'], 2003) 

撰写回答