我在 Debian 8 服务器上安装了 datadog-agent。它已经配置完毕,可以很好地报告有关 postgres、nginx、系统等的指标。
我想监控我的 gunicorn 守护进程(我在这个服务器上有 2 个 Django 网站)。据我所知,datadog-agent 已经集成了一个 statsd 服务器,所以我不需要安装一个:
# ps ax | grep datadog
18816 ? Ss 0:00 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/bin/supervisord -c /etc/dd-agent/supervisor.conf
18822 ? Sl 0:01 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/dogstatsd.py --use-local-forwarder
18824 ? S 0:01 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/ddagent.py
18825 ? S 0:01 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/agent.py foreground --use-local-forwarder
我认为“dogstatsd.py”是 statsd 服务器,但也许我错了?
然后,我修改了我的 gunicorn 启动脚本以集成--name
选项来为我的进程设置名称并--statsd-host
指示将指标发送到哪里。
# ps ax | grep gunicorn
18588 ? Ss 0:00 /var/projects/my_project/venv/bin/python3 /var/projects/my_project/venv/bin/gunicorn --name my_project --statsd-host=localhost:8125 --workers 2 --bind unix:/var/tmp/my_project.sock core.wsgi:application
18630 ? S 0:00 /var/projects/my_project/venv/bin/python3 /var/projects/my_project/venv/bin/gunicorn --name my_project --statsd-host=localhost:8125 --workers 2 --bind unix:/var/tmp/my_project.sock core.wsgi:application
18632 ? S 0:00 /var/projects/my_project/venv/bin/python3 /var/projects/my_project/venv/bin/gunicorn --name my_project --statsd-host=localhost:8125 --workers 2 --bind unix:/var/tmp/my_project.sock core.wsgi:application
现在我从 /etc/dd-agent/conf.d/ 中的示例创建了 gunicorn.yaml,如下所示
# NB: This check requires the python environment on which gunicorn runs to
# have the `setproctitle` module installed (https://pypi.python.org/pypi/setproctitle/)
init_config:
instances:
# The name of the gunicorn process. For the following gunicorn server ...
#
# gunicorn --name my_web_app my_web_app_config.ini
#
# ... we'd use the name `my_web_app`.
#
- proc_name: my_project
重新启动代理后,我等待几秒钟并检查其状态:
# sudo service datadog-agent info
# [...]
Checks
======
gunicorn
--------
- instance #0 [ERROR]: 'Found no master process with name: gunicorn: master [my_project]'
- Collected 0 metrics, 0 events & 1 service check
- Dependencies:
- psutil: 4.4.1
我找不到配置失败的地方。有人能帮我吗?
答案1
连接到 Datadog IRC 后,有人解释说 gunicorn 进程应该有一个漂亮的打印名称。解决方案是setproctitle
在与 gunicorn 相同的 venv 中使用 pip 进行安装。
显然,答案就在问题中,在“gunicorn.yaml”文件的顶部:
注意:此检查要求 gunicorn 运行的 python 环境已
setproctitle
安装该模块(https://pypi.python.org/pypi/setproctitle/)
答案2
您必须将setproctitle
包安装到您的应用程序中:
# ps aux|grep gunicorn
user 919 0.2 0.2 004 672 0:00 gunicorn --name my_app app:app --workers 5 --bind
127.0.0.1:5000 --log-level info
user 925 0.6 0.6 052 688 0:01 gunicorn --name my_app app:app --workers 5 --bind
127.0.0.1:5000 --log-level info
user 926 0.7 0.6 308 032 0:01 gunicorn --name my_app app:app --workers 5 --bind
127.0.0.1:5000 --log-level info
user 927 0.4 0.6 884 404 0:00 gunicorn --name my_app app:app --workers 5 --bind
127.0.0.1:5000 --log-level info
# cd my_app
# source ./venv/bin/activate
# pip install setproctitle
# systemctl restart gunicorn
# ps aux|grep gunicorn
user 468 0.1 0.2 068 712 0:00 gunicorn: master [my_app]
user 471 0.4 0.6 376 852 0:00 gunicorn: worker [my_app]
user 472 0.4 0.6 120 844 0:00 gunicorn: worker [my_app]
user 473 0.4 0.6 944 372 0:00 gunicorn: worker [my_app]
user 474 0.5 0.6 384 976 0:01 gunicorn: worker [my_app]
user 475 0.5 0.6 396 992 0:01 gunicorn: worker [my_app]
您可以先使用 ps 查看,其中没有 master,只有 worker 可见。之后pip install setproctitle
,在我的应用环境中,gunicorn 进程现在以 master/worker 名称可见。您可以使用以下命令进行检查:sudo -u dd-agent -- datadog-agent check gunicorn