Documentation menu

Docs Connections: Splunk

Log findings

The checks page for Splunk: what Verbiqo recognises in the logs it reads through a Splunk connection. With Splunk attached (Ask Splunk), Verbiqo searches the database and cluster logs for known events, counts them per host, and adds them to the answer and the timeline. Each finding shows its first and last line.

How to read this page. Each section is one area. Why it helps says what you get from it. Ask is a question to type that runs it. The table under it lists what Verbiqo checks there: you do not run those one by one. When a check finds a problem, it appears under the answer as a finding, with its evidence and a suggested fix.

How to ask

Name the system and the time: any problems on the orders cluster in the last 24 hours?, what did MySQL log on db01 last night?, slow searches on the logging cluster yesterday. Attach the database or cluster too, and Verbiqo joins what it logged with what it shows now.

Verbiqo recognises the logs by their Splunk sourcetype and by their content. The settings that make these events appear in the logs are in PostgreSQL logs in Splunk and MySQL logs in Splunk; for SQL Server and Redis, SQL Server and Redis.

PostgreSQL log

Why it helps: Finds errors, slow statements, lock waits and restarts in the PostgreSQL log, with who logged them, so you see what happened even after it is over.

Ask Any problems on the orders cluster in the last 24 hours?

FindingWhat it means
Slow statementsGrouped by statement, with the time they took in all, and plans from auto_explain where logged.
Lock waits and deadlocksSessions waiting for locks, and deadlocks, with the statements involved.
Temporary filesStatements writing temporary files.
Checkpoints too frequentCheckpoints closer together than their timeout.
Refused connectionsToo many clients.
Failed logins and permission errorsWith the roles involved.
TimeoutsStatements or sessions cancelled by a timeout.
Replica conflictsQueries on a standby cancelled by replay.
WAL removedA replica asking for WAL already removed: it needs a re-seed.
Archiving failed, disk full, out of memoryEach counted per host.
Wraparound warningsPostgreSQL warning about transaction ID wraparound.
Crashes, shutdowns, start-ups, promotionsDated for the timeline.
Configuration changesEvery setting changed on a reload.
Replication brokenA standby unable to reach its primary, or its WAL stream lost.
Connections refused during a restartClients turned away while the server was starting, shutting down or recovering.
Writes to a standbyWrites or primary-only functions sent to a standby or a read-only transaction, with the roles that sent them.
Prepared statements refusedParameters that do not match, or statements missing from the session, as behind PgBouncer in transaction pooling.
Invalid statementsTables, columns, functions or operators the database does not have, and SQL it cannot parse, with the roles and objects involved.
Constraint violations and bad valuesDuplicate keys and other constraints, and values that do not fit their type.

Who failed, and on which node. Each finding names the roles in its lines and says what each one is:

  • a monitoring tool, recognised by its application or role name (for example SolarWinds DPA, pganalyze, Datadog, pgwatch, PMM, Zabbix);
  • an application, when its lines show it writing or running statements on its own tables.

When every line of a finding comes from a monitoring tool, the finding says so: the tool’s own queries failed, and applications were not affected.

“recovery is in progress” is how a standby refuses a write, so Verbiqo names those hosts as standbys rather than calling the cluster down. A host whose lines show writes being checked against constraints, or sessions waiting on rows, is named as the primary.

The answer is held to both: a sentence saying the cluster is in recovery, or that a tool’s errors are application failures, is corrected or removed.

MySQL error and slow logs

Why it helps: Finds errors, crashes, replication breaks and slow statements in MySQL’s logs.

Ask What did MySQL log on db01 last night?

FindingWhat it means
Crashes and unclean startsA crash, and a start after an unclean stop, counted once each.
Starts and shutdownsDated for the timeline.
Replication errorsReplication stopping on an error.
Group ReplicationMembers unreachable and back, expelled, joining, the primary leaving, a new primary elected, majority lost and restored, connections between members failing.
Deadlocks and long semaphore waitsInnoDB threads waiting on internal locks.
Page flushing and redoPage cleaning falling behind; the redo log filling.
ResourcesDisk or a table full, out of memory or threads, out of file descriptors.
CorruptionInnoDB reporting corruption.
ConnectionsLogins refused, connections ended without closing, protocol errors, deprecated authentication.
Binary logsBinary logs that could not be purged.
Packets too largeStatements or rows larger than max_allowed_packet.
Slow statementsFrom the slow log, grouped by statement shape. The slow log must keep one event per Splunk event; Verbiqo names the sourcetype fix when it does not.

Elasticsearch server and slow logs

Why it helps: Finds node failures, memory pressure, rejected work and slow searches in Elasticsearch’s logs.

Ask Slow searches on the logging cluster yesterday

FindingWhat it means
Health changesCluster health turning red or yellow, and back to green.
MasterThe master changing; nodes unable to find or elect one.
NodesNodes leaving and joining.
HeapGarbage collection taking over a node; a node out of heap.
DiskNodes passing the high or flood-stage watermark.
RefusalsRequests refused by a circuit breaker, or rejected by a full thread pool.
FailuresShards failing, lifecycle steps failing, snapshots failing, file descriptors running out.
LoginsFailed logins.
DeprecationsUses of deprecated features, to fix before an upgrade.
Slow searchesFrom the search slow log, grouped by query shape, the slowest analyzed and rewritten.
Slow indexingFrom the indexing slow log.

SQL Server error log

Why it helps: Finds errors, failed logins, deadlocks and I/O warnings in the SQL Server error log.

Ask Any errors on the sales server last night?

From the ERRORLOG file, or the Windows Application event log where the same messages arrive with SourceName=MSSQLSERVER.

FindingWhat it means
Stack dumps and hangsInternal errors that wrote a dump; schedulers that stopped yielding or deadlocked.
CorruptionErrors 823, 824 and 825, failed page checksums, CHECKDB finding errors.
CHECKDBEach clean run, dated for the timeline.
SpaceA transaction log full (9002), with the cause; a filegroup or disk full; slow or timed-out file growth; too many virtual log files.
Memory and I/OOut of memory (701), memory paged out, I/O taking longer than 15 seconds (833), by file.
Availability groupsEach role change of the replica, and lease or quorum losses.
BackupsBackups that failed (3041).
LoginsLogins refused (18456), by login, client address and reason.
DeadlocksDeadlocks written to the log by trace flag 1222 or 1204.
Starts and shutdownsDated for the timeline.

Redis and Sentinel logs

Why it helps: Finds failovers, persistence failures and memory warnings in Redis and Sentinel logs.

Ask What happened to Redis in the last hour?

FindingWhat it means
CrashesA crash with its bug report, or an abort for lack of memory.
PersistenceSnapshots or AOF writes failing; fsync of the AOF taking too long.
Host settingsTransparent huge pages on, memory overcommit off, a TCP backlog the kernel limits: logged once at start and nowhere else.
ReplicationA replica losing its primary, replicas timing out or dropping, full resyncs, clients cut off at their output buffer limit.
Cluster and failoverThe cluster going down and coming back, nodes marked failing, failovers and Sentinel switching the primary.
Starts and shutdownsDated for the timeline.

Kubernetes events and component logs

Why it helps: Finds crashes, scheduling failures and component errors in cluster events and logs, even after the pods are gone.

Ask Any problems in the shop namespace yesterday?

Recognised by their content (event fields such as reason and involvedObject, or the kubelet's log format), whatever the sourcetype is called. That covers the Splunk Connect for Kubernetes and OpenTelemetry collectors' event sourcetypes, and the kubelet's journal.

FindingWhat it means
Crash loopsA container that keeps exiting soon after starting (CrashLoopBackOff).
OOMKilledContainers killed for going over their memory limit.
Image pullsImages that could not be fetched: a wrong tag, missing credentials, an unreachable registry.
SchedulingPods left Pending: not enough CPU or memory, taints, affinity, unbound volume claims.
ProbesLiveness, readiness and startup probes failing.
Evictions and node pressurePods evicted, and nodes short of disk, memory or process IDs.
Nodes not readyNodeNotReady, PLEG not healthy, a kubelet that stopped reporting.
VolumesVolumes that could not be attached or mounted, including Multi-Attach.
Pod networkingPod sandboxes without a network: the CNI plugin down, or the node's address range used up.
Missing configurationContainers not created because a secret, config map or key does not exist.
AutoscalingHorizontal pod autoscalers that cannot read their metric.
Cluster DNSCoreDNS errors and lookups through it timing out.
Control planeetcd slow or changing leader, lost leases, the API unreachable.
CertificatesExpired or untrusted certificates in cluster components and webhooks.
RolloutsDeployments past their progress deadline, and pods refused for a quota.
Init containersInit containers failing, so the pod never starts.
JobsJobs and CronJob runs that used up their retries or ran past their deadline.
Disruption budgetsDrains and scale-downs blocked by a pod disruption budget.
Cluster autoscalerPods waiting because no node could be added: a group at its maximum, no group that fits, cloud capacity.
Autoscaler limitsHorizontal pod autoscalers held at their maximum replicas.
Service meshEnvoy and Istio sidecars not ready.
Containers stoppedContainers Kubernetes stopped, dated for the timeline.

Application and service logs

Why it helps: Finds exceptions, timeouts and connection failures in your services’ own logs, grouped by kind.

Ask Why did checkout throw errors at 2pm?

Every other log is read for the failures applications have in common, in the words their runtimes, libraries and proxies use: Java, Scala and Akka, Python (with gunicorn, uWSGI and Celery), Node, Go, Rust, Ruby (with Rails, Puma and Unicorn), Elixir and Erlang, C and C++, .NET and PHP; nginx, Apache, Tomcat, HAProxy, Varnish and Envoy; the database, Oracle, MongoDB, Cassandra, Elasticsearch, Kafka, RabbitMQ, Redis, gRPC and cloud SDK clients, and the MongoDB, Kafka, RabbitMQ, ZooKeeper and Cassandra servers' own logs; and the Linux kernel. PHP-FPM logs are read here, not as PostgreSQL logs. In each question the two busiest unrecognised logs are read this way. Logs that carry no error level at all are searched by the model for what a failure is there, such as a status code (Ask Splunk).

FindingWhat it means
Out of memoryThe runtime out of heap or memory, and the kernel's out-of-memory killer.
CrashesPanics, segmentation faults, fatal runtime errors, stack overflows.
Unhandled exceptionsErrors nothing caught: Java, .NET, Node and Python.
Startup failuresMissing configuration, secrets, classes or modules.
ConnectionsRefused, reset or broken connections, and calls that timed out.
DNSHost names that could not be resolved.
Resource limitsOut of file descriptors, full thread pools, full or read-only disks.
Database accessConnection pools exhausted, too many connections, deadlocks and lock wait timeouts.
TLSExpired or untrusted certificates and failed handshakes.
AuthenticationExpired or invalid tokens, refused credentials, 401 and 403 responses.
ResilienceRate limits and quotas, open circuit breakers, retries exhausted.
DependenciesProxies with no healthy backend, server errors from called services, and Kafka, RabbitMQ and Redis client failures.
JVMFull garbage collections and evacuation failures.
Kafka consumer groupsRebalance storms.
PHPFatal errors (memory_limit, max_execution_time, uncaught errors), PHP-FPM out of workers (pm.max_children), slow and terminated scripts.
Web serversnginx, Apache and Tomcat out of connections or workers; requests refused for a body or header too large.
Database connectionsConnections lost under the application: the database restarting, failing over, or a firewall dropping idle ones.
MongoDB, Cassandra, ElasticsearchNo server or node reachable, writes to a former primary, too few replicas, rejected requests, write blocks.
gRPCCalls failing as UNAVAILABLE or RESOURCE_EXHAUSTED, connections closing.
Cloud APIsAccess refused, credentials expired, throttling, no capacity in the region.
Ruby, Python servers, Elixir, AkkaRails database errors and Puma or Unicorn worker timeouts; gunicorn and uWSGI worker timeouts, Celery task failures and lost workers; GenServer crashes; actor timeouts and failures.
C and C++Uncaught exceptions, memory corruption, failed assertions.
Proxies and cachesnginx rate and connection limits, TLS handshake failures, unreachable networks; Apache proxy errors; backends marked down by HAProxy or failing in Varnish.
OracleThe ORA codes that need attention: internal errors, memory, undo, deadlocks, full tablespaces, the listener, credentials, a full archive destination or recovery area.
Data serversMongoDB elections and storage errors; Kafka in-sync replicas shrinking and partitions offline; RabbitMQ alarms and partitions; ZooKeeper slow disk and lost sessions; Cassandra dropped messages, long pauses and nodes down.
Exit codes137 (killed, often for memory), 139 (segmentation fault), 143 (asked to stop).
Scheduled jobsSpring scheduled tasks, Quartz jobs and Celery tasks that failed, and lookups that found no record the code expected.
Processes stoppedSIGTERM, SIGKILL and exit code 137, dated for the timeline.

MongoDB, Kafka, RabbitMQ, ZooKeeper, Cassandra, etcd and PgBouncer

Why it helps: Finds the failures each of these servers logs, in its own wording.

Ask Any problems on the Kafka brokers today?

Each server's own log, recognised by the line format it writes, under any sourcetype name. Their clients' errors (an application that cannot reach them) are in the application checks below.

ServerFindings
MongoDBElections and step-downs, rollbacks of writes, slow queries, connections refused at the limit, heartbeat failures, fatal assertions and storage-engine errors, failed authentication.
Kafka brokerIn-sync replicas shrinking, partitions offline and unclean leader elections, controller changes, replica fetch errors, log-directory failures, ZooKeeper sessions expiring and KRaft fencing, out of memory or file descriptors.
RabbitMQMemory, disk and file-descriptor alarms (publishers blocked), network partitions, nodes down, consumers closed for not acknowledging, connections lost abruptly, quorum and mirrored queue events.
ZooKeeperSlow writes to the transaction log, leader elections, client sessions expiring, quorum connection failures, connections refused at maxClientCnxns.
CassandraDropped requests, long garbage-collection pauses, nodes down, tombstones, oversized batches and partitions, no space for compaction, out of memory.
etcdSlow applies, slow disk syncs, leader changes and missed heartbeats, the space quota reached, members unreachable.
PgBouncerClients refused at max_client_conn, clients timing out waiting for a connection, PostgreSQL unreachable, failed logins, unsupported startup parameters, clients leaving abruptly.

Access logs

Why it helps: Finds server errors and spikes in web and proxy access logs, by status and path.

Ask Any 5xx errors on the web tier this morning?

Any log whose lines carry an HTTP status: nginx, Apache, IIS, Envoy, Traefik, HAProxy, ingresses and cloud load balancers alike. Recognised by the status itself, as a field (status, sc_status, elb_status_code and similar) or in the line (Common and Combined Log Format, HAProxy's HTTP log, JSON). Counted over the whole window, beside whatever else reads the log.

FindingWhat it means
Server errors (5xx)How many, as a share of the requests; by status, host and path; when they started and stopped. When there were none, that is said as a measured result for the window.
Rate limited (429)Requests refused for coming too fast.
Refused credentials (401, 403)When they are at least 1% of the requests.

What Verbiqo does not recognise yet

Why it helps: Says plainly when a log’s format is not one Verbiqo knows, so silence is never mistaken for health.

Ask what errors don't you recognise yet? (or …in index apps). Verbiqo lists the error lines it has read on this connection that no check above recognises, the most frequent first: your own applications' error codes, messages from software not covered here. It answers from what earlier questions read, without searching. These lines are still found as errors by their level; they are just not named or explained.

Operating-system logs

Why it helps: Finds out-of-memory kills, disk errors and service failures in system logs.

Ask Did anything get OOM-killed on db01 last night?

Syslog and the systemd journal, recognised by their line formats under any sourcetype name. They also carry what applications write through them, so they are read for the application failures above too.

FindingWhat it means
Out of memoryThe kernel's out-of-memory killer, naming the process it killed.
Kernel panics and bugsPanics, kernel bugs, general protection faults.
Hung tasks and lockupsProcesses blocked on the kernel for minutes, soft lockups, RCU stalls.
DisksI/O errors and medium errors on a device.
File systemsCorruption, file systems turned read-only or shut down, no space left.
Servicessystemd units that failed to start or exited with an error.
Network sharesNFS servers not responding, stale file handles.
Network linksInterfaces and bond members going down.
ClockThe clock drifting, jumping or unable to reach a time server.
Network stackPackets dropped for a full connection-tracking table, SYN floods, TCP out of memory.
CrashesSegmentation faults and core dumps.
BootsEvery boot, dated for the timeline.

Patroni and pgBackRest

Why it helps: Finds failovers, leader changes and backup failures in Patroni and pgBackRest logs.

Ask Did the cluster fail over yesterday?

The tools around a PostgreSQL cluster, recognised by their own line formats.

FindingWhat it means
Leader changesPromotions to leader (failovers and switchovers), and leaders stepping down or losing their lock.
Coordination storePatroni unable to reach etcd, Consul or ZooKeeper, and its requests or watches on etcd breaking.
Slow loopPatroni's heartbeat running late.
Rewinds and rebuildsNodes rewound or reinitialised to rejoin the cluster.
PostgreSQL downPatroni finding PostgreSQL not running.
WAL archivingSegments not archived in time, archive commands aborted.
BackupsBackups, expiry and checks aborted; repositories and stanzas out of step; every pgBackRest error by its code; each completed backup, dated for the timeline.

Security events

Why it helps: Finds failed logins, privilege changes and suspicious access in security events.

Ask Any failed logins on the database servers today?

Windows Security, Linux authentication and SIEM alerts, with failed-then-successful logons, password spraying and cleared audit logs worked out for you: Security logs.

Something missing or unclear? Email hello@verbiqo.app.