cd /news/ai-tools/monitor-kubernetes-cronjobs · home topics ai-tools article
[ARTICLE · art-15294] src=signoz.io pub= topic=ai-tools verified=true sentiment=· neutral

Monitor Kubernetes CronJobs

SigNoz has released a guide for monitoring Kubernetes CronJobs using its `k8s-infra` OpenTelemetry collection agent, which automatically captures pod logs and Job metrics without requiring extra configuration. The guide demonstrates creating a sample CronJob and validating telemetry data in SigNoz's Logs and Metrics Explorers, enabling users to track execution history and diagnose failures.

read5 min publishedMay 27, 2026

This guide shows you how to monitor Kubernetes CronJobs with the SigNoz k8s-infra

OpenTelemetry collection agent.

Prerequisites

k8s-infra

is already installed in your cluster. If you have not installed it yet, followInstall K8s Infra.- You have kubectl

access to the cluster where your CronJobs run. - You have a SigNoz backend available to receive telemetry.

If you already have CronJobs running in your cluster, you can skip Step 1 and Step 2 and go directly to ** Default telemetry from ** and

k8s-infra

.

ValidateStep 1. Create a CronJob

Apply the following manifest to create a CronJob that runs every minute and writes logs to standard output:

apiVersion: v1
kind: Namespace
metadata:
  name: batch-jobs
---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: reporting-demo
  namespace: batch-jobs
  labels:
    app.kubernetes.io/name: reporting-demo
spec:
  schedule: "*/1 * * * *"
  timeZone: "Etc/UTC"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app.kubernetes.io/name: reporting-demo
        spec:
          restartPolicy: OnFailure
          containers:
            - name: reporter
              image: busybox:1.36
              command:
                - /bin/sh
                - -c
                - |
                  echo "cronjob=reporting-demo start=$(date -Iseconds)"
                  sleep 5
                  echo "cronjob=reporting-demo finished=$(date -Iseconds)"

This example keeps the CronJob simple but still uses a few Kubernetes defaults that are useful for production:

timeZone

: Makes the schedule explicit instead of relying on the controller's local time zoneconcurrencyPolicy: Forbid

: Prevents overlapping runssuccessfulJobsHistoryLimit

andfailedJobsHistoryLimit

: Keeps recent execution history available for debugging

Apply it:

kubectl apply -f cronjob-demo.yaml

Step 2. Wait for the first execution

Check that Kubernetes creates a Job and a Pod for the CronJob:

kubectl -n batch-jobs get cronjob,jobs,pods

You should see:

  • The reporting-demo

CronJob - A Job created from that CronJob

  • A completed Pod for that Job after the run finishes

Want to see this CronJob in a single pre-built view? Skip to Visualize with the prebuilt dashboard once a few runs have completed.

Default telemetry from k8s-infra

No extra CronJob-specific Helm values are required for the default monitoring flow. If k8s-infra

is already installed with metrics and logs collection enabled, it automatically collects CronJob pod logs and Kubernetes Job metrics when the CronJob runs.

Default logs

All logs emitted by CronJob pods are captured automatically in Logs Explorer with Kubernetes resource attributes such as:

k8s.namespace.name

k8s.cronjob.name

k8s.job.name

k8s.pod.name

Use:

k8s.cronjob.name

to see all executions for one CronJobk8s.job.name

to inspect one specific execution

Default metrics

In the validated k8s-infra

setup for this guide, these CronJob-related Kubernetes metrics were emitted by default:

k8s.cronjob.active_jobs

k8s.job.active_pods

k8s.job.successful_pods

k8s.job.failed_pods

k8s.job.desired_successful_pods

k8s.job.max_parallel_pods

These metrics come from the OpenTelemetry k8sclusterreceiver. They are attached to Kubernetes Job resources, so k8s.job.name

is the main dimension to use when you want to inspect one CronJob run in Metrics Explorer.

Validate

Validate logs in SigNoz

Open Logs Explorer and filter with these resource attributes:

k8s.cluster.name = <your-cluster-name>

k8s.namespace.name = batch-jobs

k8s.cronjob.name = reporting-demo

Replace <your-cluster-name>

with the clusterName

you set when you installed k8s-infra

.

You should see log lines from every run of the CronJob.

Use k8s.job.name

when you want to inspect one specific execution, because Kubernetes creates a new Job name for every schedule.

Validate metrics in SigNoz

Open Metrics Explorer and query one or more of these metrics:

k8s.job.active_pods

k8s.job.successful_pods

k8s.job.failed_pods

k8s.job.desired_successful_pods

k8s.job.max_parallel_pods

k8s.cronjob.active_jobs

Filter with:

k8s.cluster.name = <your-cluster-name>

k8s.namespace.name = batch-jobs

Replace <your-cluster-name>

with the clusterName

you set when you installed k8s-infra

.

Group by k8s.job.name

to see each CronJob execution separately.

Visualize with the prebuilt dashboard

Visualize with the prebuilt dashboard

SigNoz publishes a prebuilt Kubernetes CronJobs dashboard that uses the same metrics this guide validates. It shows current Job state and recent Job runs in one view, with cluster, namespace, Job, and CronJob filters.

To use it, open Dashboards in SigNoz, click New Dashboard, choose Import JSON, and paste the JSON from the link above.

Limit log collection to CronJob namespace (Optional)

Limit log collection to CronJob namespace (Optional)

Prefer namespace-based filters for CronJobs. Pod names and Job names change on every run, so namespace rules are easier to maintain.

Only collect logs from your CronJob namespace

If you keep CronJobs in a dedicated namespace, enable a whitelist for that namespace:

presets:
  logsCollection:
    whitelist:
      enabled: true
      namespaces:
        - batch-jobs

Apply the updated values to your existing release:

helm upgrade <release-name> signoz/k8s-infra -n <namespace> -f override-values.yaml

Verify these values:

<release-name>

: Your existingk8s-infra

Helm release name<namespace>

: The namespace wherek8s-infra

is installed

Exclude noisy namespaces from log collection

If shared cluster namespaces create too much log noise, exclude them:

presets:
  logsCollection:
    blacklist:
      enabled: true
      namespaces:
        - kube-system
        - default

Apply the updated values to your existing release:

helm upgrade <release-name> signoz/k8s-infra -n <namespace> -f override-values.yaml

Verify these values:

<release-name>

: Your existingk8s-infra

Helm release name<namespace>

: The namespace wherek8s-infra

is installed

Troubleshooting

Troubleshooting

I can see logs, but I do not see Job metrics

Verify that the cluster-level k8s-infra

collector deployment is running. The Job metrics in this guide came from the cluster-level collector, not from the node-level daemon.

For example, check the k8s-infra

namespace where you installed the chart:

kubectl get deployments -n <k8s-infra-namespace>
kubectl get pods -n <k8s-infra-namespace>

You should see a running deployment such as k8s-infra-k8s-cluster-otel-agent

with pods in Running

status. If the deployment is missing, re-install k8s-infra

by following Install K8s Infra.

I can see Job metrics, but I do not see CronJob logs

Check these points:

presets.logsCollection.enabled

is still enabled in yourk8s-infra

values- Your namespace is not excluded by a logsCollection.blacklist

rule - The CronJob container writes logs to standard output or standard error

My Job names keep changing on every run

That is expected Kubernetes behavior. A CronJob creates a new Job for every scheduled execution.

Use:

k8s.cronjob.name

inLogs Explorer to see all runs for one CronJobk8s.job.name

inMetrics Explorer orLogs Explorer to inspect one specific execution

Next steps

Use Logs Explorerto search CronJob executions across namespaces and filter byk8s.cronjob.name

Use Query Builderto group CronJob metrics byk8s.job.name

and compare recent runsSet up alertsto notify on failed CronJob runs or missing expected executions

── more in #ai-tools 4 stories · sorted by recency
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/monitor-kubernetes-c…] indexed:0 read:5min 2026-05-27 ·