Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
c1cb989
PER translation fixes
szabozoltan69 Sep 16, 2026
1121946
PER translation fixes
szabozoltan69 Sep 16, 2026
7311382
chore(monty-staging): update the target revision id
ranjan-stha Sep 18, 2026
e0ed8f2
chore/go api cleanup followup (#240)
thenav56 Sep 18, 2026
d3b486d
chore(monty-staging): update the target revision id
ranjan-stha Sep 18, 2026
6d7ee61
chore(monitoring): migrate staging log collection from promtail to alloy
thenav56 Sep 19, 2026
31ac626
chore(monitoring): migrate production log collection from promtail to…
thenav56 Sep 19, 2026
e283919
chore(monitoring): upgrade staging loki chart to 6.55.0
thenav56 Sep 19, 2026
f9e29f0
feat(monitoring): provision azure blob storage and workload identity …
thenav56 Sep 19, 2026
4f6349e
chore(monitoring): print loki storage account and client id on apply
thenav56 Sep 19, 2026
5ba83a6
feat(monitoring): back staging loki with azure blob via thanos objstore
thenav56 Sep 19, 2026
0e8569d
docs(monitoring): describe loki's azure blob backend
thenav56 Sep 19, 2026
500aa0d
Fix Appeal ingesting
szabozoltan69 Sep 21, 2026
9e6418d
feat(go-api/staging): django squash migration
thenav56 Sep 22, 2026
3abb824
feat(go-api/production): django squash migration
thenav56 Sep 22, 2026
fb3b82a
feat(go-api/staging): django squash migration post cleanup
thenav56 Sep 22, 2026
6235c6b
feat(go-api/production): django squash migration post cleanup
thenav56 Sep 22, 2026
6331e85
chore(monty-staging): update the target revision id
ranjan-stha Sep 22, 2026
52fdc84
feat: added montandon-eoapi-stats extractor to staging. (#242)
pantierra Sep 22, 2026
7e513fb
fix: empty collections. (#243)
pantierra Sep 22, 2026
40edefb
fix(eoapi-stats): configure ingress. (#244)
pantierra Sep 22, 2026
fa46ced
Add appeals to Brief
szabozoltan69 Sep 22, 2026
5139736
Add Appeals to Brief
szabozoltan69 Sep 22, 2026
7bba20b
chore(deps): upgraded staging eoapi-stats to 0.2.3 (#245)
pantierra Sep 22, 2026
7578da3
chore(deps): upgraded staging eoapi-stats to 0.2.4 (#246)
pantierra Sep 22, 2026
ecbf295
feat: added eoapi-stats to productions. (#248)
pantierra Sep 22, 2026
711c0dd
chore(deps): upgraded montandon-eoapi-stats to 0.2.6 (#249)
pantierra Sep 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion applications/argocd/production/applications/go-api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ spec:
repoURL: ghcr.io/ifrcgo
chart: ifrcgo-helm
# TODO: do we need to switch to a master-build chart tag
targetRevision: 0.0.2-develop.c054f0b4
targetRevision: 0.0.2-develop.cb8e9907
helm:
valueFiles:
- values/traefik.yaml
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: montandon-eoapi-stats
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: default
source:
repoURL: ghcr.io/ifrcgo/montandon-eoapi-stats
chart: montandon-eoapi-stats-helm
targetRevision: 0.2.6
helm:
valuesObject:
ingress:
enabled: true
host: montandon-eoapi.ifrc.org
path: /stats
destination:
server: https://kubernetes.default.svc
namespace: montandon-eoapi
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
207 changes: 196 additions & 11 deletions applications/argocd/production/platform/monitoring/loki.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -114,20 +114,205 @@ spec:
bloomGateway:
replicas: 0

- chart: promtail
- chart: alloy
repoURL: https://grafana.github.io/helm-charts
targetRevision: 6.16.6 # https://github.com/grafana/helm-charts/blob/main/charts/promtail/Chart.yaml
targetRevision: 1.12.1 # https://github.com/grafana/alloy/blob/main/operations/helm/charts/alloy/Chart.yaml
helm:
valuesObject:
# https://github.com/grafana/helm-charts/blob/main/charts/promtail/values.yaml
# https://github.com/grafana/alloy/blob/main/operations/helm/charts/alloy/values.yaml
# Collects pod logs from /var/log/pods and pushes them to Loki.
# The relabel rules match promtail's `kubernetes-pods` scrape job, so log streams
# carry the labels Loki queries and dashboards use: app, instance, component,
# node_name, namespace, job, pod and container.

config:
# publish data to loki
clients:
- url: http://monitoring-loki-gateway/loki/api/v1/push
tenant_id: 1
# The only CRD this chart ships is PodLogs, which this config does not use
crds:
create: false

daemonset:
controller:
type: daemonset
volumes:
extra:
- name: storage
hostPath:
path: /run/alloy
type: DirectoryOrCreate

# Trimmed to what this config needs: `discovery.kubernetes` with role=pod. The chart
# default also grants cluster-wide configmap/secret reads for unused components.
# NOTE: Both lists must stay non-empty, the chart renders `[]` into the rule list.
rbac:
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
clusterRules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]

alloy:
# No anonymous usage stats to Grafana Labs
enableReporting: false

# Read positions are kept on the host so a restarted pod resumes instead of
# re-sending every log file it tails
storagePath: /run/alloy

mounts:
# Pod log files live under /var/log/pods
varlog: true
extra:
- name: storage
mountPath: /run/alloy

configMap:
content: |-
logging {
level = "info"
format = "logfmt"
}

// HOSTNAME is the node name, so each daemonset pod only watches its own node
discovery.kubernetes "pods" {
role = "pod"

selectors {
role = "pod"
field = "spec.nodeName=" + sys.env("HOSTNAME")
}
}

discovery.relabel "pod_logs" {
targets = discovery.kubernetes.pods.targets

rule {
action = "replace"
source_labels = ["__meta_kubernetes_pod_controller_name"]
regex = "([0-9a-z-.]+?)(-[0-9a-f]{8,10})?"
target_label = "__tmp_controller_name"
}

rule {
action = "replace"
source_labels = [
"__meta_kubernetes_pod_label_app_kubernetes_io_name",
"__meta_kubernetes_pod_label_app",
"__tmp_controller_name",
"__meta_kubernetes_pod_name",
]
regex = "^;*([^;]+)(;.*)?$"
target_label = "app"
}

rule {
action = "replace"
source_labels = [
"__meta_kubernetes_pod_label_app_kubernetes_io_instance",
"__meta_kubernetes_pod_label_instance",
]
regex = "^;*([^;]+)(;.*)?$"
target_label = "instance"
}

rule {
action = "replace"
source_labels = [
"__meta_kubernetes_pod_label_app_kubernetes_io_component",
"__meta_kubernetes_pod_label_component",
]
regex = "^;*([^;]+)(;.*)?$"
target_label = "component"
}

rule {
action = "replace"
source_labels = ["__meta_kubernetes_pod_node_name"]
target_label = "node_name"
}

rule {
action = "replace"
source_labels = ["__meta_kubernetes_namespace"]
target_label = "namespace"
}

rule {
action = "replace"
source_labels = ["namespace", "app"]
separator = "/"
replacement = "$1"
target_label = "job"
}

rule {
action = "replace"
source_labels = ["__meta_kubernetes_pod_name"]
target_label = "pod"
}

rule {
action = "replace"
source_labels = ["__meta_kubernetes_pod_container_name"]
target_label = "container"
}

rule {
action = "replace"
source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"]
separator = "/"
replacement = "/var/log/pods/*$1/*.log"
target_label = "__path__"
}

// Static pods (control plane) are keyed by config hash instead of uid
rule {
action = "replace"
source_labels = [
"__meta_kubernetes_pod_annotationpresent_kubernetes_io_config_hash",
"__meta_kubernetes_pod_annotation_kubernetes_io_config_hash",
"__meta_kubernetes_pod_container_name",
]
regex = "true/(.*)"
separator = "/"
replacement = "/var/log/pods/*$1/*.log"
target_label = "__path__"
}
}

local.file_match "pod_logs" {
path_targets = discovery.relabel.pod_logs.output
}

loki.source.file "pod_logs" {
targets = local.file_match.pod_logs.targets
forward_to = [loki.process.pod_logs.receiver]
}

loki.process "pod_logs" {
stage.cri {}

// Loki's ingester refuses entries older than max_chunk_age/2 (1h), so shipping
// them only burns the ingestion rate limit. Happens whenever read positions are
// gone (fresh install, node reboot clearing /run) and every file is read in full.
stage.drop {
older_than = "1h"
drop_counter_reason = "older_than_loki_accepts"
}

forward_to = [loki.write.default.receiver]
}

// publish data to loki
loki.write "default" {
endpoint {
url = "http://monitoring-loki-gateway/loki/api/v1/push"
tenant_id = "1"
}
}

serviceMonitor:
enabled: true
deployment:
enabled: false
# Prometheus only selects ServiceMonitors carrying the kube-prometheus-stack release label
additionalLabels:
release: monitoring-kube-prometheus-stack
2 changes: 1 addition & 1 deletion applications/argocd/staging/applications/go-api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ spec:
source:
repoURL: ghcr.io/ifrcgo
chart: ifrcgo-helm
targetRevision: 0.0.2-develop.c57b926b
targetRevision: 0.0.2-develop.cb8e9907
helm:
valueFiles:
- values/traefik.yaml
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: montandon-eoapi-stats
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: default
source:
repoURL: ghcr.io/ifrcgo/montandon-eoapi-stats
chart: montandon-eoapi-stats-helm
targetRevision: 0.2.6
helm:
valuesObject:
ingress:
enabled: true
host: montandon-eoapi-stage.ifrc.org
path: /stats
destination:
server: https://kubernetes.default.svc
namespace: montandon-eoapi
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ spec:
source:
repoURL: ghcr.io/ifrcgo/montandon-etl
chart: montandon-etl-helm
targetRevision: 0.1.1-develop.c77a12dd
targetRevision: 0.1.1-develop.c53b0148
helm:
valueFiles:
- values/operators.yaml
Expand Down
Loading
Loading