使用 ECS 任务 ID 命名 Sidekiq 工作进程
Name Sidekiq worker process with ECS task ID
我们将 ECS 用于我们的应用程序,但 WebUI 中的进程获得了相当无用的名称,例如 66ef25674344
。我更希望它们以 运行 中的 ECS 任务 ID 命名。
我自己想出来了。 Sidekiq 使用 DYNO
环境变量(可能是 Heroku 的东西)或它在 运行 中的服务器主机名作为进程名称(参见 source)。在 Docker 中,主机名默认设置为容器 ID,这并不能真正反映我们在 ECS UI.
中可以看到的任何内容
如果我们在进程启动前设置 DYNO
环境变量,它将用作进程名称。这仍然可以在 config/initializers/sidekiq.rb
中完成,因此我们不需要在 shell 脚本中解析 JSON:
if ENV.key?("ECS_CONTAINER_METADATA_FILE")
ENV["DYNO"] = JSON.parse(
File.read(ENV["ECS_CONTAINER_METADATA_FILE"])
)["TaskARN"].split("/").last
end
请注意,ECS_CONTAINER_METADATA_FILE
envvar 及其引用的文件默认情况下处于禁用状态。 Here the guide to enable the metadata file.
我们将 ECS 用于我们的应用程序,但 WebUI 中的进程获得了相当无用的名称,例如 66ef25674344
。我更希望它们以 运行 中的 ECS 任务 ID 命名。
我自己想出来了。 Sidekiq 使用 DYNO
环境变量(可能是 Heroku 的东西)或它在 运行 中的服务器主机名作为进程名称(参见 source)。在 Docker 中,主机名默认设置为容器 ID,这并不能真正反映我们在 ECS UI.
如果我们在进程启动前设置 DYNO
环境变量,它将用作进程名称。这仍然可以在 config/initializers/sidekiq.rb
中完成,因此我们不需要在 shell 脚本中解析 JSON:
if ENV.key?("ECS_CONTAINER_METADATA_FILE")
ENV["DYNO"] = JSON.parse(
File.read(ENV["ECS_CONTAINER_METADATA_FILE"])
)["TaskARN"].split("/").last
end
请注意,ECS_CONTAINER_METADATA_FILE
envvar 及其引用的文件默认情况下处于禁用状态。 Here the guide to enable the metadata file.