Saltar a contenidoSaltar a navegación de páginas: página anterior [tecla acceso p]/página siguiente [tecla acceso n]
ContenidoContenido
Guía de administración
  1. Acerca de esta guía
  2. I Gestión en clúster
    1. 1 Privilegios de usuario y comandos de símbolos del sistema
    2. 2 Administración de un clúster de Salt
    3. 3 Copia de seguridad de la configuración y los datos del clúster
  3. II Funcionamiento de un clúster
    1. 4 Introducción
    2. 5 Gestión de los servicios de Ceph
    3. 6 Determinación del estado del clúster
    4. 7 Supervisión y alertas
    5. 8 Autenticación con cephx
    6. 9 Gestión de datos almacenados
    7. 10 Módulos de Ceph Manager
    8. 11 Gestión de repositorios de almacenamiento
    9. 12 Dispositivo de bloques RADOS
    10. 13 Repositorios codificados de borrado
    11. 14 Niveles de caché
    12. 15 Mejora del rendimiento con el caché de LVM
    13. 16 Configuración del clúster de Ceph
  4. III Acceso a los datos del clúster
    1. 17 Ceph Object Gateway
    2. 18 Ceph iSCSI Gateway
    3. 19 Sistema de archivos con agrupación en clúster
    4. 20 Exportación de datos de Ceph a través de Samba
    5. 21 NFS Ganesha: exportación de datos de Ceph a través de NFS
  5. IV Gestión del clúster con herramientas de interfaz gráfica de usuario
    1. 22 Ceph Dashboard
  6. V Integración con herramientas de virtualización
    1. 23 Uso de libvirt con Ceph
    2. 24 Ceph como procesador final para la instancia de QEMU KVM
  7. VI Preguntas frecuentes, consejos y solución de problemas
    1. 25 Consejos y sugerencias
    2. 26 Preguntas más frecuentes
    3. 27 Solución de problemas
  8. A Ejemplo personalizado de la fase 1 de DeepSea
  9. B Alertas por defecto para SUSE Enterprise Storage 6
  10. C Actualizaciones de mantenimiento de Ceph basadas en versiones secundarias superiores de Nautilus
  11. Glosario
  12. D Actualizaciones de la documentación
Navegación
Se aplica a SUSE Enterprise Storage 6

7 Supervisión y alertas Edit source

En SUSE Enterprise Storage 6, DeepSea ya no distribuye una pila de supervisión y alertas en el master de Salt. Los usuarios tienen que definir la función de Prometheus para Prometheus y Alertmanager, y la función de Grafana para Grafana. Cuando se asignan varios nodos con la función de Prometheus o Grafana, se distribuye una configuración de alta disponibilidad.

  • Prometheus es el kit de herramientas de supervisión y alertas.

  • Alertmanager gestiona las alertas enviadas por el servidor de Prometheus.

  • Grafana es el software de visualización y alertas.

  • prometheus-node_exporter es el servicio que se ejecuta en todos los minions de Salt.

DeepSea configura automáticamente los valores de Prometheus y los destinos de scrape (daemons de exportación). DeepSea también distribuye una lista de alertas por defecto, por ejemplo, error de estado, 10% de OSD inactivos o pgs inactivos.

7.1 Variables de pilar Edit source

El pilar de Salt es un almacén clave-valor que proporciona información y valores de configuración a los minions. Está disponible para todos los minions, cada uno con contenido diferente. El pilar de Salt se rellena previamente con valores por defecto y se puede personalizar de dos maneras:

  • /srv/pillar/ceph/stack/global.yml: para cambiar las variables del pilar en todos los nodos.

  • /srv/pillar/ceph/stack/NOMBRE_CLUSTER/minions/HOST: para cambiar configuraciones específicas de minions.

Las siguientes variables de pilar están disponibles por defecto para todos los nodos:

  monitoring:
  alertmanager:
    config: salt://path/to/config
    additional_flags: ''
  grafana:
    ssl_cert: False # self-signed certs are created by default
    ssl_key: False # self-signed certs are created by default
  prometheus:
    # pass additional configration to prometheus
    additional_flags: ''
    alert_relabel_config: []
    rule_files: []
    # per exporter config variables
    scrape_interval:
      ceph: 10
      node_exporter: 10
      prometheus: 10
      grafana: 10
    relabel_config:
      alertmanager: []
      ceph: []
      node_exporter: []
      prometheus: []
      grafana: []
    metric_relabel_config:
      ceph: []
      node_exporter: []
      prometheus: []
      grafana: []
    target_partition:
      ceph: '1/1'
      node_exporter: '1/1'
      prometheus: '1/1'
      grafana: '1/1'

7.2 Grafana Edit source

Todo el tráfico se cifra a través de Grafana. Es posible proporcionar certificados SSL propios o crear uno autofirmado.

Grafana utiliza las variables siguientes:

  • ssl_cert

  • ssl_key

Para obtener más información sobre cómo proporcionar certificados SSL propios, consulte la Sección 22.9.1.2, “Certificados firmados por una CA”. Para saber cómo crearlos, consulte la Sección 22.9.1.1, “Certificados autofirmados”.

7.3 Prometheus Edit source

La configuración basada en el exportador que se puede pasar a través del pilar. Estos grupos se asignan a los exportadores que proporcionan datos. El exportador de nodos está presente en todos los nodos, los nodos de Ceph Manager exportan Ceph; los nodos de Prometheus y Grafana exportan Prometheus y Grafana, respectivamente.

Prometheus utiliza las siguientes variables:

  • scrape_interval: cambia el intervalo de scrape ("sondeo", en terminología de Prometheus), es decir la frecuencia con la que el exportador realiza el sondeo.

  • target_partition: los destinos de scrape de la partición si se distribuyen varias instancias de Prometheus y algunas de ellas solo realizan el scrape de una parte de todas las instancias del exportador.

  • relabel_config: reescribe dinámicamente el conjunto de etiquetas de un destino antes de que se realice el scrape. Se pueden configurar varios pasos de reetiquetado por cada configuración de scrape.

  • metrics_relabel_config: se aplica a las muestras como último paso antes de la ingesta.

7.4 Alertmanager Edit source

Alertmanager gestiona las alertas enviadas por el servidor de Prometheus. Se encarga de desduplicarlos, agruparlos y enrutarlos al receptor correcto. También se encarga de silenciar las alertas. Alertmanager se configura mediante los indicadores de la línea de comandos y un archivo de configuración que define las reglas de inhibición, el enrutamiento de notificaciones y los receptores de las notificaciones.

7.4.1 Archivo de configuración Edit source

La configuración de Alertmanager es diferente en cada distribución. Por lo tanto, DeepSea no incluye ningún valor por defecto. Debe proporcionar su propio archivo de configuración alertmanager.yml. El paquete alertmanager instala por defecto un archivo de configuración /etc/prometheus/alertmanager.yml que puede servir como configuración de ejemplo. Si prefiere que DeepSea gestione la configuración de Alertmanager, añada la clave siguiente al pilar, por ejemplo, al archivo /srv/pillar/ceph/stack/ceph/minions/ID_DE_MINION_DE_SU_MASTER_DE_SALT.sls:

Para ver un ejemplo completo de un archivo de configuración de Alertmanager, consulte el Apéndice B, Alertas por defecto para SUSE Enterprise Storage 6.

monitoring:
 alertmanager_config:
   /path/to/your/alertmanager/config.yml

El archivo de configuración de Alertmanager está escrito en formato YAML. Sigue el esquema descrito a continuación. Los parámetros entre corchetes son opcionales. Para los parámetros que no aparecen en la lista, se utiliza el valor por defecto. En el esquema se utilizan los siguientes marcadores de posición genéricos:

DURATION

Una duración que coincide con la expresión regular [0-9]+(ms-[smhdsa])

LABELNAME

Una cadena que coincide con la expresión regular [a-zA-Z_][a-zA-Z0-9_]*

LABELVALUE

Una cadena de caracteres Unicode.

FILEPATH

Una vía válida del directorio de trabajo actual.

BOOLEAN

Un valor booleano que puede tomar los valores "true" o "false".

STRING

Una cadena normal.

SECRET

Una cadena normal que es un secreto; por ejemplo, una contraseña.

TMPL_STRING

Una cadena que se expande con una plantilla antes de su uso.

TMPL_SECRET

Una cadena de secreto que se expande con una plantilla antes de su uso.

Ejemplo 7.1: Configuración global

Los parámetros de la configuración global: son válidos en todos los demás contextos de configuración. También sirven como valores por defecto para otras secciones de la configuración.

global:
# the time after which an alert is declared resolved if it has not been updated
[ resolve_timeout: DURATION | default = 5m ]

# The default SMTP From header field.
[ smtp_from: TMPL_STRING ]
# The default SMTP smarthost used for sending emails, including port number.
# Port number usually is 25, or 587 for SMTP over TLS
# (sometimes referred to as STARTTLS).
# Example: smtp.example.org:587
[ smtp_smarthost: STRING ]
# The default host name to identify to the SMTP server.
[ smtp_hello: STRING | default = "localhost" ]
[ smtp_auth_username: STRING ]
# SMTP Auth using LOGIN and PLAIN.
[ smtp_auth_password: SECRET ]
# SMTP Auth using PLAIN.
[ smtp_auth_identity: STRING ]
# SMTP Auth using CRAM-MD5.
[ smtp_auth_secret: SECRET ]
# The default SMTP TLS requirement.
[ smtp_require_tls: BOOL | default = true ]

# The API URL to use for Slack notifications.
[ slack_api_url: STRING ]
[ victorops_api_key: STRING ]
[ victorops_api_url: STRING | default = "https://victorops.example.com/integrations/alert/" ]
[ pagerduty_url: STRING | default = "https://pagerduty.example.com/v2/enqueue" ]
[ opsgenie_api_key: STRING ]
[ opsgenie_api_url: STRING | default = "https://opsgenie.example.com/" ]
[ hipchat_api_url: STRING | default = "https://hipchat.example.com/" ]
[ hipchat_auth_token: SECRET ]
[ wechat_api_url: STRING | default = "https://wechat.example.com/cgi-bin/" ]
[ wechat_api_secret: SECRET ]
[ wechat_api_corp_id: STRING ]

# The default HTTP client configuration
[ http_config: HTTP_CONFIG ]

# Files from which custom notification template definitions are read.
# The last component may use a wildcard matcher, e.g. 'templates/*.tmpl'.
templates:
[ - FILEPATH ... ]

# The root node of the routing tree.
route: ROUTE

# A list of notification receivers.
receivers:
- RECEIVER ...

# A list of inhibition rules.
inhibit_rules:
[ - INHIBIT_RULE ... ]
Ejemplo 7.2: ROUTE

Un bloque ROUTE define un nodo de un árbol de enrutamiento. Los parámetros que no se especifican, se heredan de su nodo padre. Cada alerta entra en el árbol de enrutamiento en la ruta de nivel superior configurada, que debe coincidir con todas las alertas. A continuación, recorre los nodos hijos. Si el valor de la opción continue es "false·, el recorrido se detiene después del primer elemento secundario que coincida. Si se establece el valor "true" en un nodo que coincida, la alerta seguirá coincidiendo con los hijos posteriores. Si una alerta no coincide con ningún hijo de un nodo, la alerta se controla en función de los parámetros de configuración del nodo actual.

[ receiver: STRING ]
[ group_by: '[' LABELNAME, ... ']' ]

# If an alert should continue matching subsequent sibling nodes.
[ continue: BOOLEAN | default = false ]

# A set of equality matchers an alert has to fulfill to match a node.
match:
 [ LABELNAME: LABELVALUE, ... ]

# A set of regex-matchers an alert has to fulfill to match a node.
match_re:
 [ LABELNAME: REGEX, ... ]

# Time to wait before sending a notification for a group of alerts.
[ group_wait: DURATION | default = 30s ]

# Time to wait before sending a notification about new alerts
# added to a group of alerts for which an initial notification has
# already been sent.
[ group_interval: DURATION | default = 5m ]

# Time to wait before re-sending a notification
[ repeat_interval: DURATION | default = 4h ]

# Possible child routes.
routes:
 [ - ROUTE ... ]
Ejemplo 7.3: INHIBIT_RULE

Una regla de inhibición silencia una alerta de destino que coincide con un conjunto de coincidencias si existe una alerta de origen que coincida con otro conjunto de coincidencias. Ambas alertas deben compartir los mismos valores de etiqueta para los nombres de etiqueta en la lista equal.

Las alertas pueden coincidir y, por lo tanto, inhibirse a sí mismas. No escriba reglas de inhibición si una alerta coincide tanto con el origen como con el destino.

# Matchers that need to be fulfilled for the alerts to be muted.
target_match:
 [ LABELNAME: LABELVALUE, ... ]
target_match_re:
 [ LABELNAME: REGEX, ... ]

# Matchers for which at least one alert needs to exist so that the
# inhibition occurs.
source_match:
 [ LABELNAME: LABELVALUE, ... ]
source_match_re:
 [ LABELNAME: REGEX, ... ]

# Labels with an equal value in the source and target
# alert for the inhibition to take effect.
[ equal: '[' LABELNAME, ... ']' ]
Ejemplo 7.4: HTTP_CONFIG

HTTP_CONFIG sirve para configurar el cliente HTTP utilizado por el receptor para comunicarse con los servicios de API.

Tenga en cuenta que las opciones basic_auth, bearer_token y bearer_token_file son mutuamente excluyentes.

# Sets the 'Authorization' header with the user name and password.
basic_auth:
[ username: STRING ]
[ password: SECRET ]

# Sets the 'Authorization' header with the bearer token.
[ bearer_token: SECRET ]

# Sets the 'Authorization' header with the bearer token read from a file.
[ bearer_token_file: FILEPATH ]

# TLS settings.
tls_config:
# CA certificate to validate the server certificate with.
[ ca_file: FILEPATH ]
# Certificate and key files for client cert authentication to the server.
[ cert_file: FILEPATH ]
[ key_file: FILEPATH ]
# ServerName extension to indicate the name of the server.
# http://tools.ietf.org/html/rfc4366#section-3.1
[ server_name: STRING ]
# Disable validation of the server certificate.
[ insecure_skip_verify: BOOLEAN | default = false]

# Optional proxy URL.
[ proxy_url: STRING ]
Ejemplo 7.5: RECEIVER

Un receptor es una configuración con nombre para una o más integraciones de notificación.

En lugar de añadir nuevos receptores, se recomienda implementar integraciones de notificaciones personalizadas mediante el receptor de webhook (consulte el Ejemplo 7.15, “WEBHOOK_CONFIG).

# The unique name of the receiver.
name: STRING

# Configurations for several notification integrations.
email_configs:
[ - EMAIL_CONFIG, ... ]
hipchat_configs:
[ - HIPCHAT_CONFIG, ... ]
pagerduty_configs:
[ - PAGERDUTY_CONFIG, ... ]
pushover_configs:
[ - PUSHOVER_CONFIG, ... ]
slack_configs:
[ - SLACK_CONFIG, ... ]
opsgenie_configs:
[ - OPSGENIE_CONFIG, ... ]
webhook_configs:
[ - WEBHOOK_CONFIG, ... ]
victorops_configs:
[ - VICTOROPS_CONFIG, ... ]
wechat_configs:
[ - WECHAT_CONFIG, ... ]
Ejemplo 7.6: EMAIL_CONFIG
# Whether to notify about resolved alerts.
[ send_resolved: BOOLEAN | default = false ]

# The email address to send notifications to.
to: TMPL_STRING

# The sender address.
[ from: TMPL_STRING | default = global.smtp_from ]

# The SMTP host through which emails are sent.
[ smarthost: STRING | default = global.smtp_smarthost ]

# The host name to identify to the SMTP server.
[ hello: STRING | default = global.smtp_hello ]

# SMTP authentication details.
[ auth_username: STRING | default = global.smtp_auth_username ]
[ auth_password: SECRET | default = global.smtp_auth_password ]
[ auth_secret: SECRET | default = global.smtp_auth_secret ]
[ auth_identity: STRING | default = global.smtp_auth_identity ]

# The SMTP TLS requirement.
[ require_tls: BOOL | default = global.smtp_require_tls ]

# The HTML body of the email notification.
[ html: TMPL_STRING | default = '{{ template "email.default.html" . }}' ]
# The text body of the email notification.
[ text: TMPL_STRING ]

# Further headers email header key/value pairs. Overrides any headers
# previously set by the notification implementation.
[ headers: { STRING: TMPL_STRING, ... } ]
Ejemplo 7.7: HIPCHAT_CONFIG
# Whether or not to notify about resolved alerts.
[ send_resolved: BOOLEAN | default = false ]

# The HipChat Room ID.
room_id: TMPL_STRING
# The authentication token.
[ auth_token: SECRET | default = global.hipchat_auth_token ]
# The URL to send API requests to.
[ api_url: STRING | default = global.hipchat_api_url ]

# A label to be shown in addition to the sender's name.
[ from:  TMPL_STRING | default = '{{ template "hipchat.default.from" . }}' ]
# The message body.
[ message:  TMPL_STRING | default = '{{ template "hipchat.default.message" . }}' ]
# Whether this message will trigger a user notification.
[ notify:  BOOLEAN | default = false ]
# Determines how the message is treated by the alertmanager and rendered inside HipChat. Valid values are 'text' and 'html'.
[ message_format:  STRING | default = 'text' ]
# Background color for message.
[ color:  TMPL_STRING | default = '{{ if eq .Status "firing" }}red{{ else }}green{{ end }}' ]

# Configuration of the HTTP client.
[ http_config: HTTP_CONFIG | default = global.http_config ]
Ejemplo 7.8: PAGERDUTY_CONFIG

Las opciones routing_key y service_key son mutuamente excluyentes.

# Whether or not to notify about resolved alerts.
[ send_resolved: BOOLEAN | default = true ]

# The PagerDuty integration key (when using 'Events API v2').
routing_key: TMPL_SECRET
# The PagerDuty integration key (when using 'Prometheus').
service_key: TMPL_SECRET

# The URL to send API requests to.
[ url: STRING | default = global.pagerduty_url ]

# The client identification of the Alertmanager.
[ client:  TMPL_STRING | default = '{{ template "pagerduty.default.client" . }}' ]
# A backlink to the notification sender.
[ client_url:  TMPL_STRING | default = '{{ template "pagerduty.default.clientURL" . }}' ]

# The incident description.
[ description: TMPL_STRING | default = '{{ template "pagerduty.default.description" .}}' ]

# Severity of the incident.
[ severity: TMPL_STRING | default = 'error' ]

# A set of arbitrary key/value pairs that provide further details.
[ details: { STRING: TMPL_STRING, ... } | default = {
 firing:       '{{ template "pagerduty.default.instances" .Alerts.Firing }}'
 resolved:     '{{ template "pagerduty.default.instances" .Alerts.Resolved }}'
 num_firing:   '{{ .Alerts.Firing | len }}'
 num_resolved: '{{ .Alerts.Resolved | len }}'
} ]

# The HTTP client's configuration.
[ http_config: HTTP_CONFIG | default = global.http_config ]
Ejemplo 7.9: PUSHOVER_CONFIG
# Whether or not to notify about resolved alerts.
[ send_resolved: BOOLEAN | default = true ]

# The recipient user key.
user_key: SECRET

# Registered application’s API token.
token: SECRET

# Notification title.
[ title: TMPL_STRING | default = '{{ template "pushover.default.title" . }}' ]

# Notification message.
[ message: TMPL_STRING | default = '{{ template "pushover.default.message" . }}' ]

# A supplementary URL displayed together with the message.
[ url: TMPL_STRING | default = '{{ template "pushover.default.url" . }}' ]

# Priority.
[ priority: TMPL_STRING | default = '{{ if eq .Status "firing" }}2{{ else }}0{{ end }}' ]

# How often the Pushover servers will send the same notification (at least 30 seconds).
[ retry: DURATION | default = 1m ]

# How long your notification will continue to be retried (unless the user
# acknowledges the notification).
[ expire: DURATION | default = 1h ]

# Configuration of the HTTP client.
[ http_config: HTTP_CONFIG | default = global.http_config ]
Ejemplo 7.10: SLACK_CONFIG
# Whether or not to notify about resolved alerts.
[ send_resolved: BOOLEAN | default = false ]

# The Slack webhook URL.
[ api_url: SECRET | default = global.slack_api_url ]

# The channel or user to send notifications to.
channel: TMPL_STRING

# API request data as defined by the Slack webhook API.
[ icon_emoji: TMPL_STRING ]
[ icon_url: TMPL_STRING ]
[ link_names: BOOLEAN | default = false ]
[ username: TMPL_STRING | default = '{{ template "slack.default.username" . }}' ]
# The following parameters define the attachment.
actions:
[ ACTION_CONFIG ... ]
[ color: TMPL_STRING | default = '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}' ]
[ fallback: TMPL_STRING | default = '{{ template "slack.default.fallback" . }}' ]
fields:
[ FIELD_CONFIG ... ]
[ footer: TMPL_STRING | default = '{{ template "slack.default.footer" . }}' ]
[ pretext: TMPL_STRING | default = '{{ template "slack.default.pretext" . }}' ]
[ short_fields: BOOLEAN | default = false ]
[ text: TMPL_STRING | default = '{{ template "slack.default.text" . }}' ]
[ title: TMPL_STRING | default = '{{ template "slack.default.title" . }}' ]
[ title_link: TMPL_STRING | default = '{{ template "slack.default.titlelink" . }}' ]
[ image_url: TMPL_STRING ]
[ thumb_url: TMPL_STRING ]

# Configuration of the HTTP client.
[ http_config: HTTP_CONFIG | default = global.http_config ]
Ejemplo 7.11: ACTION_CONFIG para SLACK_CONFIG
# Provide a button to tell Slack you want to render a button.
type: TMPL_STRING
# Label for the button.
text: TMPL_STRING
# http or https URL to deliver users to. If you specify invalid URLs, the message will be posted with no button.
url: TMPL_STRING
#  If set to 'primary', the button will be green, indicating the best forward action to take
#  'danger' turns the button red, indicating a destructive action.
[ style: TMPL_STRING [ default = '' ]
Ejemplo 7.12: FIELD_CONFIG para SLACK_CONFIG
# A bold heading without markup above the value text.
title: TMPL_STRING
# The text of the field. It can span across several lines.
value: TMPL_STRING
# A flag indicating if value is short enough to be displayed together with other values.
[ short: BOOLEAN | default = slack_config.short_fields ]
Ejemplo 7.13: OPSGENIE_CONFIG
# Whether or not to notify about resolved alerts.
[ send_resolved: BOOLEAN | default = true ]

# The API key to use with the OpsGenie API.
[ api_key: SECRET | default = global.opsgenie_api_key ]

# The host to send OpsGenie API requests to.
[ api_url: STRING | default = global.opsgenie_api_url ]

# Alert text (maximum is 130 characters).
[ message: TMPL_STRING ]

# A description of the incident.
[ description: TMPL_STRING | default = '{{ template "opsgenie.default.description" . }}' ]

# A backlink to the sender.
[ source: TMPL_STRING | default = '{{ template "opsgenie.default.source" . }}' ]

# A set of arbitrary key/value pairs that provide further detail.
[ details: { STRING: TMPL_STRING, ... } ]

# Comma separated list of team responsible for notifications.
[ teams: TMPL_STRING ]

# Comma separated list of tags attached to the notifications.
[ tags: TMPL_STRING ]

# Additional alert note.
[ note: TMPL_STRING ]

# Priority level of alert, one of P1, P2, P3, P4, and P5.
[ priority: TMPL_STRING ]

# Configuration of the HTTP.
[ http_config: HTTP_CONFIG | default = global.http_config ]
Ejemplo 7.14: VICTOROPS_CONFIG
# Whether or not to notify about resolved alerts.
[ send_resolved: BOOLEAN | default = true ]

# The API key for talking to the VictorOps API.
[ api_key: SECRET | default = global.victorops_api_key ]

# The VictorOps API URL.
[ api_url: STRING | default = global.victorops_api_url ]

# A key used to map the alert to a team.
routing_key: TMPL_STRING

# Describes the behavior of the alert (one of 'CRITICAL', 'WARNING', 'INFO').
[ message_type: TMPL_STRING | default = 'CRITICAL' ]

# Summary of the alerted problem.
[ entity_display_name: TMPL_STRING | default = '{{ template "victorops.default.entity_display_name" . }}' ]

# Long explanation of the alerted problem.
[ state_message: TMPL_STRING | default = '{{ template "victorops.default.state_message" . }}' ]

# The monitoring tool the state message is from.
[ monitoring_tool: TMPL_STRING | default = '{{ template "victorops.default.monitoring_tool" . }}' ]

# Configuration of the HTTP client.
[ http_config: HTTP_CONFIG | default = global.http_config ]
Ejemplo 7.15: WEBHOOK_CONFIG

Puede utilizar el receptor de webhook para configurar un receptor genérico.

# Whether or not to notify about resolved alerts.
[ send_resolved: BOOLEAN | default = true ]

# The endpoint for sending HTTP POST requests.
url: STRING

# Configuration of the HTTP client.
[ http_config: HTTP_CONFIG | default = global.http_config ]

Alertmanager envía peticiones HTTP POST con el siguiente formato JSON:

{
 "version": "4",
 "groupKey": STRING, // identifycation of the group of alerts (to deduplicate)
 "status": "<resolved|firing>",
 "receiver": STRING,
 "groupLabels": OBJECT,
 "commonLabels": OBJECT,
 "commonAnnotations": OBJECT,
 "externalURL": STRING, // backlink to Alertmanager.
 "alerts": [
   {
     "status": "<resolved|firing>",
     "labels": OBJECT,
     "annotations": OBJECT,
     "startsAt": "<rfc3339>",
     "endsAt": "<rfc3339>",
     "generatorURL": STRING // identifies the entity that caused the alert
   },
   ...
 ]
}

El receptor de webhook permite la integración con los siguientes mecanismos de notificación:

  • DingTalk (https://github.com/timonwong/prometheus-webhook-dingtalk)

  • Bot de IRC (https://github.com/multimfi/bot)

  • JIRAlert (https://github.com/free/jiralert)

  • Phabricator/Maniphest (https://github.com/knyar/phalerts)

  • prom2teams: reenvía notificaciones a los equipos de Microsoft (https://github.com/idealista/prom2teams)

  • SMS: admite varios proveedores (https://github.com/messagebird/sachet)

  • Bot de Telegram (https://github.com/inCaller/prometheus_bot)

  • Alerta SNMP (https://github.com/SUSE/prometheus-webhook-snmp)

Ejemplo 7.16: WECHAT_CONFIG
# Whether or not to notify about resolved alerts.
[ send_resolved: BOOLEAN | default = false ]

# The API key to use for the WeChat API.
[ api_secret: SECRET | default = global.wechat_api_secret ]

# The WeChat API URL.
[ api_url: STRING | default = global.wechat_api_url ]

# The corp id used to authenticate.
[ corp_id: STRING | default = global.wechat_api_corp_id ]

# API request data as defined by the WeChat API.
[ message: TMPL_STRING | default = '{{ template "wechat.default.message" . }}' ]
[ agent_id: STRING | default = '{{ template "wechat.default.agent_id" . }}' ]
[ to_user: STRING | default = '{{ template "wechat.default.to_user" . }}' ]
[ to_party: STRING | default = '{{ template "wechat.default.to_party" . }}' ]
[ to_tag: STRING | default = '{{ template "wechat.default.to_tag" . }}' ]

7.4.2 Alertas personalizadas Edit source

Puede definir las condiciones de alerta personalizadas para enviar notificaciones a un servicio externo. Prometheus utiliza su propio lenguaje de expresión para definir alertas personalizadas. A continuación se muestra un ejemplo de una regla con una alerta:

groups:
- name: example
 rules:
  # alert on high deviation from average PG count
  - alert: high pg count deviation
   expr: abs(((ceph_osd_pgs > 0) - on (job) group_left avg(ceph_osd_pgs > 0) by (job)) / on (job) group_left avg(ceph_osd_pgs > 0) by (job)) > 0.35
   for: 5m
   labels:
    severity: warning
    type: ses_default
   annotations:
   description: >
    OSD {{ $labels.osd }} deviates by more then 30% from average PG count

La cláusula opcional for especifica el tiempo que Prometheus esperará entre la primera vez que encuentre un elemento vectorial de salida de expresión nuevo y que cuente que una alerta se ha desencadenado. En este caso, Prometheus comprobará que la alerta continúa activa durante 5 minutos antes de desencadenar la alerta. Los elementos en estado pendiente están activos, pero aún no se han desencadenado.

La cláusula labels especifica un conjunto de etiquetas adicionales adjuntas a la alerta. Las etiquetas en conflicto se sustituirán. Es posible crear una plantilla para las etiquetas (consulte la Sección 7.4.2.1, “Plantillas” para obtener más detalles sobre la plantillas).

La cláusula annotations especifica etiquetas informativas. Puede usarlas para almacenar información adicional, por ejemplo, descripciones de alertas o vínculos de runbook. Es posible crear una plantilla para las anotaciones (consulte la Sección 7.4.2.1, “Plantillas” para obtener más detalles sobre la plantillas).

Para añadir sus alertas personalizadas a SUSE Enterprise Storage 6:

  • puede colocar sus archivos YAML con alertas personalizadas en el directorio /etc/prometheus/alerts

o bien

  • proporcionar una lista de vías a los archivos de alerta personalizados del pilar en la clave monitoring:custom_alerts. Los archivos de alerta se añadirán en el lugar adecuado en la fase 2 de DeepSea o con el comando salt MASTER_DE_SALT state.apply ceph.monitoring.prometheus.

    Ejemplo 7.17: Adición de alertas personalizadas a SUSE Enterprise Storage

    Hay un archivo con alertas personalizadas en /root/my_alerts/my_alerts.yml en el master de Salt. Si añade

    monitoring:
     custom_alerts:
       - /root/my_alerts/my_alerts.yml

    al archivo /srv/pillar/ceph/cluster/ID_DE_MINION_DE_SU_MASTER_DE_SALT.sls, DeepSea creará el archivo /etc/prometheus/alerts/my_alerts.yml y reiniciará Prometheus.

7.4.2.1 Plantillas Edit source

Puede utilizar plantillas para los valores de las etiquetas y las anotaciones. La variable $labels incluye los pares clave/valor de etiqueta de una instancia de alerta, mientras que $value contiene el valor evaluado de una instancia de alerta.

En el ejemplo siguiente, se inserta una etiqueta y un valor de elemento de desencadenado:

{{ $labels.LABELNAME }}
{{ $value }}

7.4.2.2 Inspección de alertas en el tiempo de ejecución Edit source

Si necesita verificar qué alertas están activas, tiene varias opciones:

  • Diríjase a la pestaña Alerts (Alertas) de Prometheus. Allí se muestran los conjuntos de etiquetas exactos para los que hay activas alertas definidas. Prometheus también almacena series temporales sintéticas para las alertas pendientes y desencadenadas. Tienen el siguiente formato:

    ALERTS{alertname="ALERT_NAME", alertstate="pending|firing", ADDITIONAL_ALERT_LABELS}

    El valor de muestra es 1 si la alerta está activa (pendiente o desencadenada). La serie se marca como "obsoleta" si la alerta está inactiva.

  • En la interfaz Web de Prometheus, en la URL http://IP_DE_HOST_DE_PROMETHEUS:9090/alerts, inspeccione las alertas y su estado (INACTIVAS, PENDIENTES o DESENCADENADAS).

  • En la interfaz Web de Alertmanager, en la URL http://IP_DE_HOST_DE_PROMETHEUS9093/alerts, inspeccione las alertas y siléncielas si lo desea.

7.4.3 Receptor de alerta SNMP Edit source

Si desea recibir una notificación sobre las alertas de Prometheus mediante alertas SNMP, puede instalar el receptor de alertas SNMP de Alertmanager de Prometheus a través de DeepSea. Para ello, debe habilitarlo en el pilar, en la clave monitoring:alertmanager_receiver_snmp:enabled. La configuración del receptor se debe establecer en la clave monitoring:alertmanager_receiver_snmp:config. El receptor se instalará y se configurará en la ubicación adecuada en la fase 2 de DeepSea o mediante el comando salt MASTER_DE_SALT state.apply ceph.monitoring.alertmanager.

Ejemplo 7.18: Configuración de alerta SNMP
monitoring:
 alertmanager:
   receiver:
      snmp:
        enabled: True
        config:
          host: localhost
          port: 9099
          snmp_host: snmp.foo-bar.com
          snmp_community: private
          metrics: True

Consulte el manual del receptor en https://github.com/SUSE/prometheus-webhook-snmp#global-configuration-file para obtener más detalles sobre las opciones de configuración.

Imprimir esta página