Tengo un nuevo servidor que ejecuta Prometheus en docker-compose. Quiero poder volver a cargar el archivo de configuración (prometheus.yml) sin tener que detener e iniciar el contenedor.
Por supuesto, dado que persisto en el almacenamiento de promethues en un volumen, detener e iniciar no es realmente un problema, pero parece excesivo, especialmente porque Prometheus tiene una API tan útil para recargar configuraciones.
Veo a otras personas con preguntas similares (por ejemplo , aquí ) pero no he podido hacer que esas soluciones funcionen para mí. Tal vez estoy pasando por alto algo allí.
docker-compose.yml
version: "3" services: grafana: restart: always container_name: grafana image: grafana/grafana:6.2.1 ports: - 3000:3000 volumes: - grafanadata:/var/lib/grafana prometheus: restart: always container_name: prometheus image: prom/prometheus:v2.10.0 privileged: true volumes: - ./configuration/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - prometheusdata:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--web.enable-admin-api' - '--web.enable-lifecycle' ports: - 9090:9090 node: restart: always container_name: node image: prom/node-exporter:v0.18.0 ports: - 9100:9100 volumes: grafanadata: prometheusdata:Por desgracia, mis resultados ..
Cuando ejecuto curl -X POST http://localhost:9090/-/reload , los registros de docker-compose dan:
prometheus | level=info ts=2019-06-17T15:33:02.690Z caller=main.go:730 msg="Loading configuration file" filename=/etc/prometheus/prometheus.yml prometheus | level=info ts=2019-06-17T15:33:02.691Z caller=main.go:758 msg="Completed loading of configuration file" filename=/etc/prometheus/prometheus.ymlAsí que el final de Prometheus está funcionando bien... Todo bien hasta ahora.
Sin embargo, cuando edito ./configuration/prometheus/prometheus.yml , los cambios no se propagan al contenedor. Además, cuando trato de editar /etc/promethus/prometheus.yml en el contenedor, veo que es de solo lectura (y aparte, el contenedor no tiene un comando 'sudo').
¿Existe una forma nativa de docker para recargar en vivo/en vivo estos archivos de configuración en el directorio del contenedor?
Como se indicó, la opción de inicio/inicio funciona por ahora, pero tengo curiosidad por saber si hay una solución más elegante.
docker-compose kill -s SIGHUP prometheus hace el truco, por lo que Vishrant ciertamente estaba en algo allí.
Su problema podría ser que su editor no está guardando el archivo modificado en el mismo inodo. Entonces, dockerd no se da cuenta de que el archivo cambió, ya que está escrito en un nuevo inodo. Las soluciones pueden ser montar el directorio completo o decirle a su editor que no use un archivo temporal:
Es decir, para Sublime, configurar "atomic_save": falso para las preferencias del usuario podría ayudar (los resultados no están claros) o para vim, consulte https://github.com/moby/moby/issues/15793#issuecomment-571932545
Este tema es muy interesante para este tema en general: https://github.com/moby/moby/issues/15793
Asumiré que ya ha actualizado el archivo /etc/prometheus/prometheus.yml y solo está preguntando sobre la recarga de la configuración. (Aunque la configuración puede ser parte del mapa de configmap , y puede evitar que el pod se reinicie cuando cambia el configmap de configuración).
Ejecute el siguiente comando para volver a cargar la configuración sin detener el proceso de Prometheus:
docker exec <prometheus_container_name> sudo killall -HUP prometheus Explicación: el comando sudo killall -HUP prometheus envía una señal SIGHUP al proceso de prometheus para recargar las configuraciones.
Valide los cambios llamando al:
curl -X GET http://localhost:9090/api/v1/status/config