【问题标题】:How to handle Sematext becoming detached from monitoring a restarted container如何处理 Sematext 与监视重新启动的容器分离
【发布时间】:2020-09-24 09:33:59
【问题描述】:

我正在使用 Sematext 监控一小部分 Docker 容器以及 Logsene 功能,以从一个运行 Node Express Web 应用程序的容器收集 Web 流量日志。

在我更新并重新启动 Web 服务器容器以引入新的代码构建之前,一切正常。此时,Sematext Logsene 似乎与容器分离,因此我丢失了监控中的 HTTP 日志跟踪。我仍然看到 Docker 事件,所以似乎只有日志部分被破坏了。

我正在“手动”运行 Sematext(即它不在我的 Docker Compose 中),如下所示:

sudo docker run -d --name sematext-agent --restart=always -e SPM_TOKEN=$SPM_TOKEN \
  -e LOGSENE_TOKEN=$LOGSENE_TOKEN -v /:/rootfs:ro -v /var/run/docker.sock:/var/run/docker.sock \
  sematext/sematext-agent-docker

然后我像这样更新我的应用程序:

docker-compose pull web && docker-compose up -d

其中web 是 Web 应用程序服务名称(在数据库、memcached 等中) 它会重新创建 Web 容器并重新启动它。

此时 Sematext 停止转发 HTTP 日志。

要修复它,我可以像这样重新启动 Sematext 代理:

docker restart sematext-agent

HTTP 日志再次开始到达他们的仪表板。

所以,我知道我可以将代理重启命令附加到我的发布脚本中,但我想知道是否有一种方法可以防止它首先被分离?我想这与它监视运行文件有关。

我搜索了他们的文档和常见问题解答,但没有找到任何关于这种效果的具体内容。

【问题讨论】:

    标签: node.js docker express logging apm


    【解决方案1】:

    我似乎已经修复了它,但不像我预期的那样。

    在查看文档时,我发现内置 Logsene 集成的 sematext-agent-docker 包已被弃用,取而代之的是两个单独的包。

    “此图像已弃用。 请使用 sematext/agent 进行监控,使用 sematext/logagent 进行日志收集。” https://hub.docker.com/r/sematext/sematext-agent-docker/

    您现在必须同时使用 Logagent https://sematext.com/docs/logagent/installation-docker/ 和新的 Sematext Agent https://sematext.com/docs/agents/sematext-agent/containers/installation/

    安装了这两个之后,我通过拉取一个新的容器映像进行了快速测试,似乎日志仍然到达了他们的 Web 仪表板。

    所以也许问题是特定于以前的包,而这个新代理可以以某种方式更好地“跟随”容器重建。

    所以我的新命令是(只是从文档中复制的,但我使用 env-vars 作为键)

    docker run -d --name st-logagent --restart=always \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -e LOGS_TOKEN=$SEMATEXT_LOGS_TOKEN \
      -e REGION=US \
      sematext/logagent:latest
    
    docker run -d  --restart always --privileged -P --name st-agent \
    -v /:/hostfs:ro \
    -v /sys/:/hostfs/sys:ro \
    -v /var/run/:/var/run/ \
    -v /sys/kernel/debug:/sys/kernel/debug \
    -v /etc/passwd:/etc/passwd:ro \
    -v /etc/group:/etc/group:ro \
    -e INFRA_TOKEN=$SEMATEXT_INFRA_TOKEN \
    -e CONTAINER_TOKEN=$SEMATEXT_CONTAINER_TOKEN \
    -e REGION=US \
    sematext/agent:latest
    

    在哪里

    CONTAINER_TOKEN     == old SPM_TOKEN
    LOGS_TOKEN          == old LOGSENE_TOKEN
    INFRA_TOKEN         = new to me
    

    我会看看这是否长期有效(不仅仅是快速测试)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多