feat: Updating datanode and graylog health check and starup probes - #169
Merged
Conversation
alix-graylog
marked this pull request as ready for review
August 27, 2026 18:02
aaronmgn
approved these changes
Aug 27, 2026
alix-graylog
added a commit
that referenced
this pull request
Aug 27, 2026
No commit in the 1.0.0 to 2.0.0 window carried a breaking-change footer, so release-please had no breaking-changes section to generate. This adds the 16 found by rendering the chart at both versions and diffing resource names, StatefulSet immutable fields, security contexts and values keys. Also adds the mongodb entry from #176, which the parser dropped, corrects "starup" to "startup" in the #169 entry, and gives #160 a description of what it actually does. The publish job generates artifacthub.io/changes from this file, so these notes reach Artifact Hub as written.
alix-graylog
added a commit
that referenced
this pull request
Aug 27, 2026
* chore(main): release graylog 2.0.0 * chore(main): write the 2.0.0 breaking changes into the changelog No commit in the 1.0.0 to 2.0.0 window carried a breaking-change footer, so release-please had no breaking-changes section to generate. This adds the 16 found by rendering the chart at both versions and diffing resource names, StatefulSet immutable fields, security contexts and values keys. Also adds the mongodb entry from #176, which the parser dropped, corrects "starup" to "startup" in the #169 entry, and gives #160 a description of what it actually does. The publish job generates artifacthub.io/changes from this file, so these notes reach Artifact Hub as written. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: alix-graylog <alix.fullerton@graylog.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replaces the chart's TCP-only probes with checks that answer "this pod can serve" instead of "a port is open". The readiness probe is a StatefulSet's only rollout throttle, so a probe that goes green too early lets a rolling update move on to the next pod while the previous one is still recovering. Closes the G-02 half of #150; G-03 already landed in #147.
Details
templates/workload/containers/_probes.tplrenders every probe for both tiers. Any probe block may carry its ownhttpGet,tcpSocket,execorgrpchandler, which replaces the chart default for that probe. Two handlers on one probe fail the render rather than silently picking one.httpGet /api/system/lbstatus, withschemefollowinggraylog.config.tls.enabled. Liveness stays a TCP connect on the app port on purpose:DEADmeans "stop sending me traffic", so liveness onlbstatuswould have kubelet restart a pod that is draining or parked for maintenance.startupProbeadded to both tiers atfailureThreshold: 30xperiodSeconds: 10, so a first-node MongoDB migration or a large journal replay cannot eat the liveness budget.datanode.podManagementPolicyexposed, defaulting toOrderedReady.successThresholdis no longer rendered on liveness or startup probes, because Kubernetes requires 1 and rejects any other value. The values key still validates, so existing values files keep working.tests/probes_test.yaml. Suite is now 29 suites / 368 tests.lb_statusdrain note indocs/graylog-message-handling.mdupdated now that readiness actually acts on it.Two things the implementation revised
/, 404 elsewhere), and the image ships no HTTP client for anexecprobe. Readiness proves OpenSearch is listening; it cannot gate on shard recovery or cluster-green. Documented as a limitation.podManagementPolicyis immutable. Defaulting it toParallelwould makehelm upgradefail on every existing release, so it ships opt-in with the--cascade=orphanrecreate procedure documented.Linked issues
This fixes #150 (G-02 half; G-03 landed in #147). Also covers U-01 and U-04 from
the production readiness review.
PR Checklist
Please check the items that apply to your change.
Testing Checklist
Static Validation
helm lint ./charts/grayloghelm template graylog ./charts/graylog --validateInstallation
helm install graylog ./charts/graylogkubectl rollout status statefulset/grayloghelm test graylogFunctional (if applicable)
Upgrade (if applicable)
Specific to this PR
Readyat t=21s with only 8999 bound, while OpenSearch did not bind 9200 until t=55s, so the probe went green 34 seconds before OpenSearch was listening. After: the same restart stayedReady=falsethrough t=58s and wentReadyat t=70s with 9200 serving.lb_statusdrain end to end.PUT .../override/deadmade readiness fail and the pod left the Service endpoints in about 50 seconds with 0 restarts, confirming the deliberate TCP-liveness split keeps kubelet from killing a parked pod.override/alivereturned it toReadywithin 10 seconds.podManagementPolicyis rejected on a live StatefulSet, which is whyParallelis not the default.Notes for reviewers
One open question from #150
The issue asked what to do about
THROTTLED. Graylog answerslbstatuswith429when it is throttled, usually under journal pressure, and Kubernetes counts only 200-399 as success. So a throttled node now fails readiness and leaves the Service. That is correct backpressure for ingest, but the same Service carries the web port, so a cluster-wide throttle also takes the UI down. This PR keeps the plainhttpGetand does not treat429as ready. Worth a decision before merge: accept it, or add theexecwrapper the issue floated as an opt-in.Once the drain is active the pod is no longer reachable through the Service, so the
override/alivecall has to be addressed to the pod directly. That is documented, but it is the kind of thing worth knowing before you try it on a realcluster.