Hydrologs

Use the hydro.logs table for insight about your cluster health

Overview

Hydrolix uses Vector to gather log information from its Kubernetes namespace clusters, and stores it in the hydro.logs table. This data shows cluster and pod health, and is a good starting point when troubleshooting or looking for insight into cluster activity.

Considerations when querying hydro.logs

This table is intentionally large and wide. It includes hundreds of fields to support deep observability and debugging. It's important to use targeted filters and time bounds to keep your queries fast and efficient.

Common useful fields

Use these table fields to query information from the hydro.logs table:

Field NamePurposeExamples
appThe service related to the log entry.
Pulled from the hydrolix.io/service Kubernetes annotation if available. Otherwise falls back to metadata.labels.app.
grafana, operator, query-peer
componentThe internal Hydrolix component responsible for the log entry.query_executor, root, turbine
containerThe container associated with the log entry.node-exporter, query-head, merge-peer
errorThe error message related to the log entry, if present.Unable to merge, segfault, timeout
messageA description or summary of the log event.Processed event, Deleted expired cache, Error connecting
levelThe severity level of the log entry.error, info
poolThe pool associated with the log entry.
Pulled from the hydrolix.io/pool Kubernetes annotation.
query-peer, siem-connection
streamThe output stream for the log entry. For example, standard output or error.stdout, stderr

Kubernetes table fields

Use these table fields for Kubernetes and cluster-specific queries in the hydro.logs table:

Field NamePurposeExamples
kubernetes.container_idUnique ID of the containerdocker://abcdef1234567890
kubernetes.container_imageImage used to run the containerregistry.example.com/myapp:v1.2.3
kubernetes.container_nameName of the container within the podmyapp-container
kubernetes.namespace_labelsLabels applied to the namespace{ "team": "platform", "env": "prod" }
kubernetes.pod_annotationsAnnotations applied to the pod{ "sidecar.istio.io/inject": "true" }
kubernetes.pod_ipPrimary IP address assigned to the pod10.1.2.3
kubernetes.pod_ipsAll IP addresses assigned to the pod (IPv4 and IPv6)[ "10.1.2.3", "fd00::1234" ]
kubernetes.pod_labelsLabels assigned to the pod{ "app": "myapp", "tier": "frontend" }
kubernetes.pod_nameName of the podmyapp-deployment-5d8f6b9f4b-jx9kl
kubernetes.pod_namespaceNamespace in which the pod runsproduction
kubernetes.pod_node_nameName of the node hosting the podgke-cluster-node-1
kubernetes.pod_ownerOwning resource that controls the podReplicaSet/myapp-deployment-5d8f6b9f4b

Catchall field

When ingesting data into hydro.logs the catchall column receives data for any unknown input fields. See Catch features for more information.

Use queries against the catchall map datatype column to find strings that include OS and hardware information about clusters. For example catchall['kubernetes.node_labels'].

ORDER BY LIMIT optimization

The catchall field also contains log data from the query subsystem about usage of the ORDER BY LIMIT optimization.

Key in catchall fieldDescription
limit_optimization.levelIndicates if a LIMIT query optimization was applied and which type
limit_optimization.num_partitions_skippedNumber of partitions skipped by the optimizer
limit_optimization.num_partitions_unskippablePartitions that could not be skipped

This example shows how to query the catchall key to find optimization information:

SELECT
  catchall['limit_optimization.level'] AS level,
  catchall['limit_optimization.num_partitions_skipped'] AS skipped,
  catchall['limit_optimization.num_partitions_unskippable'] AS unskippable
FROM hydro.logs
WHERE timestamp > NOW() - INTERVAL 1 HOUR
  AND app = 'query-head';

What’s Next

Learn about effective queries for cluster health