fix: run db migrations as Argo PreSync hook + add openobserve collector/alerts
This commit is contained in:
parent
0c92767030
commit
1b4ef92083
13 changed files with 493 additions and 2 deletions
|
|
@ -2,12 +2,12 @@ apiVersion: batch/v1
|
||||||
kind: Job
|
kind: Job
|
||||||
metadata:
|
metadata:
|
||||||
name: nxtgauge-db-migrate
|
name: nxtgauge-db-migrate
|
||||||
|
labels:
|
||||||
|
app: nxtgauge-db-migrate
|
||||||
annotations:
|
annotations:
|
||||||
argocd.argoproj.io/hook: PreSync
|
argocd.argoproj.io/hook: PreSync
|
||||||
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation,HookSucceeded
|
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation,HookSucceeded
|
||||||
argocd.argoproj.io/sync-wave: "-1"
|
argocd.argoproj.io/sync-wave: "-1"
|
||||||
labels:
|
|
||||||
app: nxtgauge-db-migrate
|
|
||||||
spec:
|
spec:
|
||||||
ttlSecondsAfterFinished: 300
|
ttlSecondsAfterFinished: 300
|
||||||
backoffLimit: 3
|
backoffLimit: 3
|
||||||
|
|
|
||||||
21
argocd/openobserve-alerts-application.yaml
Normal file
21
argocd/openobserve-alerts-application.yaml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: openobserve-alerts
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: https://github.com/Traceworks2023/nxtgauge-gitops.git
|
||||||
|
targetRevision: main
|
||||||
|
path: ops/openobserve-alerts
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: openobserve
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|
||||||
21
argocd/openobserve-otelcol-application.yaml
Normal file
21
argocd/openobserve-otelcol-application.yaml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: openobserve-otelcol
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: https://github.com/Traceworks2023/nxtgauge-gitops.git
|
||||||
|
targetRevision: main
|
||||||
|
path: ops/openobserve-otelcol
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: openobserve
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|
||||||
22
ops/openobserve-alerts/README.md
Normal file
22
ops/openobserve-alerts/README.md
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
# OpenObserve alerts + Telegram
|
||||||
|
|
||||||
|
This deploys a CronJob (`openobserve-alerts-bootstrap`) that upserts alert templates + common alerts in OpenObserve.
|
||||||
|
|
||||||
|
## Prereqs
|
||||||
|
|
||||||
|
Create a Kubernetes Secret with your Telegram chat id:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl -n openobserve create secret generic openobserve-telegram \
|
||||||
|
--from-literal=TELEGRAM_CHAT_ID='<your_chat_id>'
|
||||||
|
```
|
||||||
|
|
||||||
|
The OpenObserve credentials are read from the existing Secret created by the OpenObserve install:
|
||||||
|
|
||||||
|
- `o2-openobserve-standalone` (`ZO_ROOT_USER_EMAIL`, `ZO_ROOT_USER_PASSWORD`)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Alerts are created to send to destination `nxtgauge_telegram` (must exist in OpenObserve).
|
||||||
|
- Edit `ops/openobserve-alerts/configmap.yaml` to add/remove alerts.
|
||||||
|
|
||||||
166
ops/openobserve-alerts/configmap.yaml
Normal file
166
ops/openobserve-alerts/configmap.yaml
Normal file
|
|
@ -0,0 +1,166 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: openobserve-alerts-bootstrap
|
||||||
|
namespace: openobserve
|
||||||
|
data:
|
||||||
|
bootstrap.sh: |
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
ORG_ID="${ORG_ID:-default}"
|
||||||
|
BASE_URL="${BASE_URL:-http://o2-openobserve-standalone.openobserve.svc.cluster.local:5080}"
|
||||||
|
STREAM_NAME="${STREAM_NAME:-default}"
|
||||||
|
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
||||||
|
|
||||||
|
if [ -z "${ZO_ROOT_USER_EMAIL:-}" ] || [ -z "${ZO_ROOT_USER_PASSWORD:-}" ]; then
|
||||||
|
echo "missing ZO_ROOT_USER_EMAIL / ZO_ROOT_USER_PASSWORD"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ -z "$TELEGRAM_CHAT_ID" ]; then
|
||||||
|
echo "missing TELEGRAM_CHAT_ID"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
AUTH="$(printf '%s:%s' "$ZO_ROOT_USER_EMAIL" "$ZO_ROOT_USER_PASSWORD" | base64 | tr -d '\n')"
|
||||||
|
auth_hdr="Authorization: Basic $AUTH"
|
||||||
|
|
||||||
|
api() {
|
||||||
|
# shellcheck disable=SC2068
|
||||||
|
curl -sfS -H "$auth_hdr" -H "Content-Type: application/json" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_template() {
|
||||||
|
template_name="$1"
|
||||||
|
template_type="$2" # http or email
|
||||||
|
title="$3"
|
||||||
|
body="$4"
|
||||||
|
is_default="$5" # true/false
|
||||||
|
|
||||||
|
payload="$(jq -n \
|
||||||
|
--arg name "$template_name" \
|
||||||
|
--arg type "$template_type" \
|
||||||
|
--arg title "$title" \
|
||||||
|
--arg body "$body" \
|
||||||
|
--argjson isDefault "$is_default" \
|
||||||
|
'{name: $name, type: $type, title: $title, body: $body, isDefault: $isDefault}')"
|
||||||
|
|
||||||
|
# Upsert: PUT works for existing, and also works as create in newer versions.
|
||||||
|
if api -X PUT "$BASE_URL/api/$ORG_ID/alerts/templates/$template_name" -d "$payload" >/dev/null 2>&1; then
|
||||||
|
echo "upserted template=$template_name"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
api -X POST "$BASE_URL/api/$ORG_ID/alerts/templates" -d "$payload" >/dev/null
|
||||||
|
echo "created template=$template_name"
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_alert() {
|
||||||
|
alert_name="$1"
|
||||||
|
sql="$2"
|
||||||
|
period_minutes="$3"
|
||||||
|
frequency_minutes="$4"
|
||||||
|
silence_minutes="$5"
|
||||||
|
row_template="$6"
|
||||||
|
|
||||||
|
existing_id="$(
|
||||||
|
api "$BASE_URL/api/v2/$ORG_ID/alerts" \
|
||||||
|
| jq -r --arg n "$alert_name" '.list[] | select(.name == $n) | .alert_id' \
|
||||||
|
| head -n 1
|
||||||
|
)"
|
||||||
|
|
||||||
|
payload="$(jq -n \
|
||||||
|
--arg name "$alert_name" \
|
||||||
|
--arg stream "$STREAM_NAME" \
|
||||||
|
--arg sql "$sql" \
|
||||||
|
--argjson period "$period_minutes" \
|
||||||
|
--argjson frequency "$frequency_minutes" \
|
||||||
|
--argjson silence "$silence_minutes" \
|
||||||
|
--arg row_template "$row_template" \
|
||||||
|
'{
|
||||||
|
name: $name,
|
||||||
|
stream_type: "logs",
|
||||||
|
stream_name: $stream,
|
||||||
|
is_real_time: false,
|
||||||
|
enabled: true,
|
||||||
|
tz_offset: 330,
|
||||||
|
destinations: ["nxtgauge_telegram"],
|
||||||
|
row_template: $row_template,
|
||||||
|
row_template_type: "String",
|
||||||
|
query_condition: { type: "sql", sql: $sql },
|
||||||
|
trigger_condition: {
|
||||||
|
period: $period,
|
||||||
|
operator: ">=",
|
||||||
|
threshold: 1,
|
||||||
|
frequency: $frequency,
|
||||||
|
frequency_type: "minutes",
|
||||||
|
silence: $silence
|
||||||
|
}
|
||||||
|
}')"
|
||||||
|
|
||||||
|
if [ -n "$existing_id" ] && [ "$existing_id" != "null" ]; then
|
||||||
|
resp="$(api -X PUT "$BASE_URL/api/v2/$ORG_ID/alerts/$existing_id" -d "$payload")" || {
|
||||||
|
echo "failed updating alert=$alert_name id=$existing_id"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
code="$(echo "$resp" | jq -r '.code // empty')"
|
||||||
|
if [ "$code" != "200" ]; then
|
||||||
|
echo "failed updating alert=$alert_name id=$existing_id resp=$resp"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "updated alert=$alert_name id=$existing_id"
|
||||||
|
else
|
||||||
|
resp="$(api -X POST "$BASE_URL/api/v2/$ORG_ID/alerts" -d "$payload")" || {
|
||||||
|
echo "failed creating alert=$alert_name"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
code="$(echo "$resp" | jq -r '.code // empty')"
|
||||||
|
if [ "$code" != "200" ]; then
|
||||||
|
echo "failed creating alert=$alert_name resp=$resp"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "created alert=$alert_name"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Telegram template includes useful debugging context + top rows.
|
||||||
|
# Uses OpenObserve built-in variables: {alert_url}, {alert_count}, {rows:5}, etc.
|
||||||
|
telegram_body="$(printf '{\"chat_id\":\"%s\",\"text\":\"ALERT {alert_name}\\\\norg={org_name} stream={stream_type}/{stream_name}\\\\ncount={alert_count} window={alert_start_time}..{alert_end_time}\\\\n\\\\n{rows:5}\\\\n\\\\nOpen: {alert_url}\"}' "$TELEGRAM_CHAT_ID")"
|
||||||
|
|
||||||
|
ensure_template "telegram_nxtgauge" "http" "" "$telegram_body" true
|
||||||
|
|
||||||
|
ensure_alert \
|
||||||
|
"k8s-image-pull-failures" \
|
||||||
|
"SELECT k8s_namespace_name, k8s_pod_name, body_object_reason, body_object_message FROM \"default\" WHERE body_object_message ILIKE '%ErrImagePull%' OR body_object_message ILIKE '%ImagePullBackOff%' OR body_object_message ILIKE '%Failed to pull image%' ORDER BY _timestamp DESC LIMIT 50" \
|
||||||
|
5 1 30 \
|
||||||
|
"{k8s_namespace_name}/{k8s_pod_name} {body_object_reason}: {body_object_message}"
|
||||||
|
|
||||||
|
ensure_alert \
|
||||||
|
"k8s-crashloopbackoff" \
|
||||||
|
"SELECT k8s_namespace_name, k8s_pod_name, body_object_reason, body_object_message FROM \"default\" WHERE body_object_message ILIKE '%CrashLoopBackOff%' OR body_object_message ILIKE '%Back-off restarting failed container%' ORDER BY _timestamp DESC LIMIT 50" \
|
||||||
|
5 1 30 \
|
||||||
|
"{k8s_namespace_name}/{k8s_pod_name} {body_object_reason}: {body_object_message}"
|
||||||
|
|
||||||
|
ensure_alert \
|
||||||
|
"k8s-volume-mount-failures" \
|
||||||
|
"SELECT k8s_namespace_name, k8s_pod_name, body_object_reason, body_object_message FROM \"default\" WHERE body_object_message ILIKE '%FailedMount%' OR body_object_message ILIKE '%FailedAttachVolume%' OR body_object_message ILIKE '%MountVolume%' ORDER BY _timestamp DESC LIMIT 50" \
|
||||||
|
10 2 60 \
|
||||||
|
"{k8s_namespace_name}/{k8s_pod_name} {body_object_reason}: {body_object_message}"
|
||||||
|
|
||||||
|
ensure_alert \
|
||||||
|
"argocd-errors" \
|
||||||
|
"SELECT k8s_pod_name, k8s_container_name, substring(body, 1, 220) AS msg FROM \"default\" WHERE k8s_namespace_name = 'argocd' AND (body ILIKE '%level=error%' OR body ILIKE '%ERROR%' OR body ILIKE '%ComparisonError%' OR body ILIKE '%SyncFailed%') ORDER BY _timestamp DESC LIMIT 50" \
|
||||||
|
10 2 30 \
|
||||||
|
"argocd/{k8s_pod_name} {k8s_container_name}: {msg}"
|
||||||
|
|
||||||
|
ensure_alert \
|
||||||
|
"woodpecker-errors" \
|
||||||
|
"SELECT k8s_pod_name, k8s_container_name, substring(body, 1, 220) AS msg FROM \"default\" WHERE k8s_namespace_name = 'woodpecker' AND (body ILIKE '%error%' OR body ILIKE '%ERROR%' OR body ILIKE '%failed%') ORDER BY _timestamp DESC LIMIT 50" \
|
||||||
|
10 2 30 \
|
||||||
|
"woodpecker/{k8s_pod_name} {k8s_container_name}: {msg}"
|
||||||
|
|
||||||
|
ensure_alert \
|
||||||
|
"registry-errors" \
|
||||||
|
"SELECT k8s_pod_name, k8s_container_name, substring(body, 1, 220) AS msg FROM \"default\" WHERE k8s_namespace_name = 'registry' AND (body ILIKE '%error%' OR body ILIKE '%ERROR%' OR body ILIKE '%413%' OR body ILIKE '%payload too large%') ORDER BY _timestamp DESC LIMIT 50" \
|
||||||
|
10 2 60 \
|
||||||
|
"registry/{k8s_pod_name} {k8s_container_name}: {msg}"
|
||||||
49
ops/openobserve-alerts/cronjob.yaml
Normal file
49
ops/openobserve-alerts/cronjob.yaml
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: CronJob
|
||||||
|
metadata:
|
||||||
|
name: openobserve-alerts-bootstrap
|
||||||
|
namespace: openobserve
|
||||||
|
spec:
|
||||||
|
schedule: "*/15 * * * *"
|
||||||
|
concurrencyPolicy: Forbid
|
||||||
|
jobTemplate:
|
||||||
|
spec:
|
||||||
|
backoffLimit: 0
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
restartPolicy: Never
|
||||||
|
containers:
|
||||||
|
- name: bootstrap
|
||||||
|
image: registry.nxtgauge.com/docker:28-cli
|
||||||
|
command: ["sh", "-lc"]
|
||||||
|
args:
|
||||||
|
- apk add --no-cache curl jq >/dev/null && /scripts/bootstrap.sh
|
||||||
|
env:
|
||||||
|
- name: ORG_ID
|
||||||
|
value: default
|
||||||
|
- name: BASE_URL
|
||||||
|
value: http://o2-openobserve-standalone.openobserve.svc.cluster.local:5080
|
||||||
|
- name: TELEGRAM_CHAT_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: openobserve-telegram
|
||||||
|
key: TELEGRAM_CHAT_ID
|
||||||
|
- name: ZO_ROOT_USER_EMAIL
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: o2-openobserve-standalone
|
||||||
|
key: ZO_ROOT_USER_EMAIL
|
||||||
|
- name: ZO_ROOT_USER_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: o2-openobserve-standalone
|
||||||
|
key: ZO_ROOT_USER_PASSWORD
|
||||||
|
volumeMounts:
|
||||||
|
- name: scripts
|
||||||
|
mountPath: /scripts
|
||||||
|
readOnly: true
|
||||||
|
volumes:
|
||||||
|
- name: scripts
|
||||||
|
configMap:
|
||||||
|
name: openobserve-alerts-bootstrap
|
||||||
|
defaultMode: 0555
|
||||||
9
ops/openobserve-alerts/kustomization.yaml
Normal file
9
ops/openobserve-alerts/kustomization.yaml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
namespace: openobserve
|
||||||
|
|
||||||
|
resources:
|
||||||
|
- configmap.yaml
|
||||||
|
- cronjob.yaml
|
||||||
|
|
||||||
23
ops/openobserve-otelcol/README.md
Normal file
23
ops/openobserve-otelcol/README.md
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
# OpenObserve OpenTelemetry Collector (k8s logs + warning events)
|
||||||
|
|
||||||
|
This deploys an OpenTelemetry Collector `DaemonSet` that ships:
|
||||||
|
|
||||||
|
- container logs from `/var/log/containers/*.log`
|
||||||
|
- Kubernetes `Warning` events (watch)
|
||||||
|
|
||||||
|
to OpenObserve via OTLP/HTTP.
|
||||||
|
|
||||||
|
## Image mirroring
|
||||||
|
|
||||||
|
The DaemonSet expects this image in the internal registry:
|
||||||
|
|
||||||
|
- `registry.nxtgauge.com/otelcol-contrib:0.105.0`
|
||||||
|
|
||||||
|
Mirror it once (from a machine that can pull GHCR and push to the registry):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker pull ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.105.0
|
||||||
|
docker tag ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.105.0 registry.nxtgauge.com/otelcol-contrib:0.105.0
|
||||||
|
docker push registry.nxtgauge.com/otelcol-contrib:0.105.0
|
||||||
|
```
|
||||||
|
|
||||||
65
ops/openobserve-otelcol/configmap.yaml
Normal file
65
ops/openobserve-otelcol/configmap.yaml
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: openobserve-otelcol-config
|
||||||
|
namespace: openobserve
|
||||||
|
data:
|
||||||
|
collector.yaml: |
|
||||||
|
extensions:
|
||||||
|
basicauth/openobserve:
|
||||||
|
client_auth:
|
||||||
|
username: ${env:ZO_ROOT_USER_EMAIL}
|
||||||
|
password: ${env:ZO_ROOT_USER_PASSWORD}
|
||||||
|
|
||||||
|
receivers:
|
||||||
|
filelog/containers:
|
||||||
|
include:
|
||||||
|
- /var/log/containers/*.log
|
||||||
|
start_at: end
|
||||||
|
include_file_path: true
|
||||||
|
operators:
|
||||||
|
- id: parse_k8s_from_path
|
||||||
|
type: regex_parser
|
||||||
|
parse_from: attributes["log.file.path"]
|
||||||
|
regex: '^.*/(?P<k8s_pod_name>[^_]+)_(?P<k8s_namespace_name>[^_]+)_(?P<k8s_container_name>.+)-(?P<k8s_container_id>[0-9a-f]+)\.log$'
|
||||||
|
on_error: drop
|
||||||
|
|
||||||
|
k8sobjects/warning_events:
|
||||||
|
auth_type: serviceAccount
|
||||||
|
objects:
|
||||||
|
- name: events
|
||||||
|
mode: watch
|
||||||
|
field_selector: type=Warning
|
||||||
|
|
||||||
|
processors:
|
||||||
|
batch: {}
|
||||||
|
|
||||||
|
resource/containers:
|
||||||
|
attributes:
|
||||||
|
- action: upsert
|
||||||
|
key: service.name
|
||||||
|
value: k8s_container_logs
|
||||||
|
|
||||||
|
resource/events:
|
||||||
|
attributes:
|
||||||
|
- action: upsert
|
||||||
|
key: service.name
|
||||||
|
value: k8s_events
|
||||||
|
|
||||||
|
exporters:
|
||||||
|
otlphttp/openobserve:
|
||||||
|
logs_endpoint: http://o2-openobserve-standalone.openobserve.svc.cluster.local:5080/api/default/v1/logs
|
||||||
|
auth:
|
||||||
|
authenticator: basicauth/openobserve
|
||||||
|
|
||||||
|
service:
|
||||||
|
extensions: [basicauth/openobserve]
|
||||||
|
pipelines:
|
||||||
|
logs/containers:
|
||||||
|
receivers: [filelog/containers]
|
||||||
|
processors: [resource/containers, batch]
|
||||||
|
exporters: [otlphttp/openobserve]
|
||||||
|
logs/events:
|
||||||
|
receivers: [k8sobjects/warning_events]
|
||||||
|
processors: [resource/events, batch]
|
||||||
|
exporters: [otlphttp/openobserve]
|
||||||
69
ops/openobserve-otelcol/daemonset.yaml
Normal file
69
ops/openobserve-otelcol/daemonset.yaml
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: openobserve-otelcol
|
||||||
|
namespace: openobserve
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: openobserve-otelcol
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: openobserve-otelcol
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: openobserve-otelcol
|
||||||
|
spec:
|
||||||
|
serviceAccountName: openobserve-otelcol
|
||||||
|
tolerations:
|
||||||
|
- operator: Exists
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 0
|
||||||
|
runAsGroup: 0
|
||||||
|
containers:
|
||||||
|
- name: otelcol
|
||||||
|
image: registry.nxtgauge.com/otelcol-contrib:0.105.0
|
||||||
|
args: ["--config=/conf/collector.yaml"]
|
||||||
|
env:
|
||||||
|
- name: ZO_ROOT_USER_EMAIL
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: o2-openobserve-standalone
|
||||||
|
key: ZO_ROOT_USER_EMAIL
|
||||||
|
- name: ZO_ROOT_USER_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: o2-openobserve-standalone
|
||||||
|
key: ZO_ROOT_USER_PASSWORD
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 128Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
volumeMounts:
|
||||||
|
- name: conf
|
||||||
|
mountPath: /conf
|
||||||
|
readOnly: true
|
||||||
|
- name: varlogcontainers
|
||||||
|
mountPath: /var/log/containers
|
||||||
|
readOnly: true
|
||||||
|
- name: varlogpods
|
||||||
|
mountPath: /var/log/pods
|
||||||
|
readOnly: true
|
||||||
|
volumes:
|
||||||
|
- name: conf
|
||||||
|
configMap:
|
||||||
|
name: openobserve-otelcol-config
|
||||||
|
items:
|
||||||
|
- key: collector.yaml
|
||||||
|
path: collector.yaml
|
||||||
|
- name: varlogcontainers
|
||||||
|
hostPath:
|
||||||
|
path: /var/log/containers
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
- name: varlogpods
|
||||||
|
hostPath:
|
||||||
|
path: /var/log/pods
|
||||||
|
type: DirectoryOrCreate
|
||||||
11
ops/openobserve-otelcol/kustomization.yaml
Normal file
11
ops/openobserve-otelcol/kustomization.yaml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
namespace: openobserve
|
||||||
|
|
||||||
|
resources:
|
||||||
|
- serviceaccount.yaml
|
||||||
|
- rbac.yaml
|
||||||
|
- configmap.yaml
|
||||||
|
- daemonset.yaml
|
||||||
|
|
||||||
29
ops/openobserve-otelcol/rbac.yaml
Normal file
29
ops/openobserve-otelcol/rbac.yaml
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: openobserve-otelcol
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- nodes
|
||||||
|
- namespaces
|
||||||
|
- pods
|
||||||
|
- events
|
||||||
|
verbs: ["get", "list", "watch"]
|
||||||
|
- apiGroups: ["events.k8s.io"]
|
||||||
|
resources: ["events"]
|
||||||
|
verbs: ["get", "list", "watch"]
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: openobserve-otelcol
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: openobserve-otelcol
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: openobserve-otelcol
|
||||||
|
namespace: openobserve
|
||||||
|
|
||||||
6
ops/openobserve-otelcol/serviceaccount.yaml
Normal file
6
ops/openobserve-otelcol/serviceaccount.yaml
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: openobserve-otelcol
|
||||||
|
namespace: openobserve
|
||||||
|
|
||||||
Loading…
Add table
Reference in a new issue