Saltar a contenido

Health

Descripción

Este endpoint muestra el estado de los subcomponentes internos de NetinDS-Zavod.

Se debe consultar cuando se quiere saber si todos los componentes y subcomponentes de NetinDS-Zavod funcionan correctamente.

Mediante a variable CONFIG_HEALTH_MAX_NOTES_SIZE, cuyo valor por defecto es 20, es posible configurar el tamaño de la lista de "notas" que se muestran en este apartado.

Las notas muestran los diferentes pasos en las secuencias de actualización de alarmas y dispositivos cuando estas actualizaciones son solicitadas de forma externa, esto es, mediante otros componentes de NetinDS o peticiones OpenC2 externas.

Podemos encontrarlo en la ruta <ip>:<Zavod_port>/v1/health.

Visualización

Al realizar una petición GET al endpoint nos devuelve una respuesta en formato JSON.

{
    "status": "pass",
    "version": "2",
    "releaseID": "2.1.5",
    "notes": [ ],
    "output": "",
    "serviceID": "8646c8f7-0d44-44f0-8053-af7cd74af47e",
    "description": "Health for Zavod",
    "links": {
        "about": "https://docs.netin.io"
    },
    "details": {
        "consumer:datapoint:unblock:connectionState": [
            {
                "status": "pass",
                "componentId": "7715167c-6db0-498a-b4c6-e8d82439e8fb",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.843Z"
            }
        ],
        "consumer:datapoint:block:connectionState": [
            {
                "status": "pass",
                "componentId": "6c764f37-eacf-4afd-8fd9-ab431ead6e88",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.850Z"
            }
        ],
        "consumer:datapointSet:unblock:connectionState": [
            {
                "status": "pass",
                "componentId": "09d38cbc-e457-40f6-8ad4-7d7d70efd895",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.855Z"
            }
        ],
        "consumer:datapointSet:block:connectionState": [
            {
                "status": "pass",
                "componentId": "54450a92-88d6-4b44-9843-85f45a3a390d",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.858Z"
            }
        ],
        "consumer:alarms:unblock:connectionState": [
            {
                "status": "pass",
                "componentId": "7c796590-51cc-47b1-945b-43d596634895",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.876Z"
            }
        ],
        "consumer:alarms:block:connectionState": [
            {
                "status": "pass",
                "componentId": "7be4856c-0a73-463c-80c1-0a38bc451234",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.890Z"
            }
        ],
        "publisher:data:connectionState": [
            {
                "status": "pass",
                "componentId": "770e7314-7c91-40c7-8aa6-125875e233a7",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.896Z"
            }
        ],
        "oc2:producer:publisher:connectionState": [
            {
                "status": "pass",
                "componentId": "5b461082-99a7-4edf-9f69-f9b92b21894a",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.893Z"
            }
        ],
        "oc2:producer:subscriber:connectionState": [
            {
                "status": "pass",
                "componentId": "5b3ee82a-88f1-4126-81e3-3eb7bbe86170",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.903Z"
            }
        ],
        "oc2:consumer:publisher:connectionState": [
            {
                "status": "pass",
                "componentId": "7849d387-d57d-4abc-8467-40fc6185de79",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.900Z"
            }
        ],
        "oc2:consumer:subscriber:connectionState": [
            {
                "status": "pass",
                "componentId": "8f8af446-8298-422f-813a-f6f6f6987de4",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.924Z"
            }
        ],
        "addressesLegacy:connectionState": [
            {
                "status": "pass",
                "componentId": "e85e97a6-e3bc-4221-af6e-f879861575df",
                "componentType": "datastore",
                "metricValue": "running",
                "time": "2022-06-30T11:35:53.980Z"
            }
        ],
        "alarmIngestor:component": [
            {
                "status": "pass",
                "componentId": "045266b0-fe84-453a-a62e-3a63e77a779a",
                "componentType": "component",
                "metricValue": "0/100",
                "metricUnit": "jobs",
                "time": "2022-07-01T10:48:37.024Z"
            }
        ],
        "publisher:component:control": [
            {
                "status": "pass",
                "componentId": "831b80ba-109f-4f44-8ecf-c00b82167e41",
                "componentType": "component",
                "metricValue": "0/100",
                "metricUnit": "jobs",
                "time": "2022-07-01T10:48:37.025Z"
            }
        ],
        "publisher:component:data": [
            {
                "status": "pass",
                "componentId": "da775862-148b-4739-bcc3-033ba3f74a17",
                "componentType": "component",
                "metricValue": "0/100",
                "metricUnit": "jobs",
                "time": "2022-07-01T10:48:37.025Z"
            }
        ],
        "datapointIngestor:component": [
            {
                "status": "pass",
                "componentId": "b4270fb6-5fcd-4589-8ec8-8be7f6310786",
                "componentType": "component",
                "metricValue": "0/100",
                "metricUnit": "jobs",
                "time": "2022-07-01T10:48:37.025Z"
            }
        ],
        "engine:component": [
            {
                "status": "pass",
                "componentId": "42aca680-6956-446b-beb9-496662ed983a",
                "componentType": "component",
                "metricValue": "0/200",
                "metricUnit": "jobs",
                "time": "2022-07-01T10:48:37.025Z",
                "output": [
                    "CrashError: 2022-06-30T12:10:51.900Z - Cannot read property 'split' of null",
                    "caused by CrashError: Cannot read property 'split' of null"
                ]
            }
        ],
        "zavod:external": [
            {
                "componentId": "netin-ds-fh-agent-local",
                "componentType": "OpenC2 Consumer",
                "time": "2022-07-01T10:48:28.424Z",
                "status": "pass",
                "metricValue": {
                    "pairs": {
                        "query": [
                            "features"
                        ],
                        "delete": [
                            "x-netin:alarms",
                            "x-netin:devices"
                        ],
                        "scan": [
                            "x-netin:alarms",
                            "x-netin:devices"
                        ]
                    },
                    "profiles": [
                        "x-netin"
                    ],
                    "rate_limit": 5,
                    "versions": [
                        "1.0"
                    ]
                },
                "metricUnit": "features"
            },
            {
                "componentId": "5e1cf2d8-a192-5e2e-b470-57d4afc3c767.netin-ds-fh-server-local",
                "componentType": "OpenC2 Consumer",
                "time": "2022-07-01T10:48:28.424Z",
                "status": "pass",
                "metricValue": {
                    "pairs": {
                        "query": [
                            "features"
                        ],
                        "delete": [
                            "x-netin:alarms",
                            "x-netin:devices"
                        ],
                        "scan": [
                            "x-netin:alarms",
                            "x-netin:devices"
                        ]
                    },
                    "profiles": [
                        "x-netin"
                    ],
                    "rate_limit": 5,
                    "versions": [
                        "1.0"
                    ]
                },
                "metricUnit": "features"
            }
        ],
        "uptime": [
            {
                "componentId": "zavod",
                "componentType": "system",
                "metricValue": "PT23H12M54.614S",
                "metricUnit": "time",
                "status": "pass",
                "time": "2022-07-01T10:48:37.026Z"
            }
        ]
    }
}

Listado de campos

  • status(string): Indica el estado del servicio, y si es aceptable o no. Puede tener los valores pass, fail o warn. Se considera un estado aceptable, si es de tipo pass, y no aceptable si es de tipo warn o fail.

  • version(string): Indica la versión pública del servicio.

  • releaseID(string): Indica el identificador de implementación del servicio. Suele ser distinto al valor de la versión pública.

  • notes(Array): Es una lista de notas que son relevantes para el estado de salud actual del servicio.

  • output(string): En caso de que el status tenga los valores warn o fail, indica la salida del error producido sin procesar. Este campo debe ser omitido en caso de que el status tenga el valor pass.

  • serviceID(string): Indica el identificador único del servicio.

  • description(string): Indica una breve descripción del servicio.

  • links(Array): Posee enlaces los cuales pueden proveer información adicional acerca de la salud del endpoint. Podría contener algunos de los siguientes campos:

  • about(string): Provee un enlace con información más detallada sobre el componente.
  • self(string): Provee un enlace con información sobre el componente.
  • related(string): Provee un enlace con información relacionada con el componente.

  • details(Array): Es un objeto que almacena los estados de los subcomponentes del servicio.

Los subcomponentes pueden ser los siguientes:

  • consumer(Object): Indican el estado de las conexiones al sistema de Redis, las cuales pueden estar relacionadas con las alarmas, los datapoints, datapointSets, etc. Este a su vez, posee los siguientes campos:

    • status(string): Indica el estado del subcomponente, y si es aceptable o no. Puede tener los valores pass, fail o warn. Se considera un estado aceptable, si es de tipo pass, y no aceptable si es de tipo warn o fail.

    • componentId(string): Indica el identificador único del subcomponente/dependencia del servicio. Pueden aparecer múltiples objetos con el mismo componentId si son de distintos nodos.

    • componentType(string): Indica el tipo de componente. Este puede ser un valor predefinido (entre los que se incluye component,datastore o system), un término común y estándar de una fuente fiable (como schema.org, IANA o microformatos), o una URI que indique reglas de procesamiento y semánticas adicionales, que pueden ser provistas por un recurso al otro lado del URI

    • metricvalue(string): Indica la unidad de métrica, y debe estar presente, en caso de que metricValue esté presente. Puede ser un término común y estándar de una fuente fiable (como schema.org, IANA o microformatos), o una URI que indique reglas de procesamiento y semánticas adicionales, que pueden ser provistas por un recurso al otro lado del URI.

    • time(string): Indica la fecha y hora, en formato ISO8601, del momento que se guardó metricValue..

  • publisher(Object): Indica el estado de las conexiones de MongoDB que se encargan de almacenar los datapoints transformados. Cuenta a con los mismos campos que el elemento consumer. Adicionalmente puede contar con los siguientes campos:

    • output(Array): Es una lista que contiene las distintas líneas de salida que ha producido el subcomponente.
    • metricunit(string): Indica la unidad de métrica empleada.
  • addressesLegacy: Indica el estado de las conexiones de MongoDB que se encargan de obtener las configuraciones de los datapoints, para realizar las transformaciones que sean necesarias. Cuenta con los mismos campos que el elemento consumer.

  • alarmIngestor: Es el microservicio encargado de ingestar las alarmas que van a ser procesadas cuando en el stream se procesen los trabajos que son enviados a los firehose. Cuenta con los mismos campos que el elemento consumer.

  • datapointIngestor: Es el microservicio encargado de ingestar los datapoints que van a ser procesados cuando en el stream se procesen los trabajos que son enviados a los firehose. Cuenta con los mismos campos que el elemento consumer. Adicionalmente puede contar con el siguiente campo:

    • metricunit(string): Indica la unidad de métrica empleada.
  • engine:component(Array) Es el microservicio encargado de procesar los trabajos que son enviados al firehose. Cuenta con los mismos campos que el elemento consumer. Adicionalmente puede contar con el siguiente campo:

    • metricunit(string): Indica la unidad de métrica empleada.
  • zavod:external(Array): Muestra un conjunto de las conexiones con servicios externos a Zavod, generalmente son firehoses, que se comportan como herramientas ETL (Extract-Transform-Load) permitiendo el envío de datos adaptados a diferentes servicios consumidores de datos. Por cada conexión se muestran los mismos campos que el elemento consumer. Adicionalmente puede contar con los siguientes campos:

    • metricunit(string): Indica la unidad de métrica empleada.

    En este caso el campo metricValue muestra la respuesta de la conexión en formato openC2

  • uptime(Array): Indica la duración de tiempo en segundos desde cuando el servicio se encuentra activo hasta el momento en el que se realiza la consulta. Cuenta con los siguientes campos:

    • componentId: El valor permanece constante a 'zavod'.
    • componentType: El valor permanece constante a 'system'.
    • metricValue: Indica cuánto tiempo en segundos lleva activo el servicio.
    • metricUnit: El valor permanece constante a 'time'.
    • status: El valor permanece constante a 'pass'.
    • time: Muestra la fecha actual en el momento de la consulta.

También puede tener, adicionalmente, otras propiedades deseadas, las cuales tienen el siguiente formato: [x: string]: any;