logging: add loki and fluent-bit
This commit is contained in:
parent
a57448f074
commit
1027fe5ce5
@ -7,6 +7,7 @@ resources:
|
|||||||
- ../../services/jellyfin
|
- ../../services/jellyfin
|
||||||
- ../../services/comms
|
- ../../services/comms
|
||||||
- ../../services/monitoring
|
- ../../services/monitoring
|
||||||
|
- ../../services/logging
|
||||||
- ../../services/pegasus
|
- ../../services/pegasus
|
||||||
- ../../services/vault
|
- ../../services/vault
|
||||||
- ../../services/bstein-dev-home
|
- ../../services/bstein-dev-home
|
||||||
|
|||||||
@ -8,5 +8,6 @@ resources:
|
|||||||
- traefik/kustomization.yaml
|
- traefik/kustomization.yaml
|
||||||
- gitops-ui/kustomization.yaml
|
- gitops-ui/kustomization.yaml
|
||||||
- monitoring/kustomization.yaml
|
- monitoring/kustomization.yaml
|
||||||
|
- logging/kustomization.yaml
|
||||||
- longhorn-ui/kustomization.yaml
|
- longhorn-ui/kustomization.yaml
|
||||||
- ../platform/vault-csi/kustomization.yaml
|
- ../platform/vault-csi/kustomization.yaml
|
||||||
|
|||||||
@ -0,0 +1,14 @@
|
|||||||
|
# clusters/atlas/flux-system/platform/logging/kustomization.yaml
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: logging
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
path: ./services/logging
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
name: flux-system
|
||||||
|
wait: false
|
||||||
9
infrastructure/sources/helm/fluent-bit.yaml
Normal file
9
infrastructure/sources/helm/fluent-bit.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# infrastructure/sources/helm/fluent-bit.yaml
|
||||||
|
apiVersion: source.toolkit.fluxcd.io/v1
|
||||||
|
kind: HelmRepository
|
||||||
|
metadata:
|
||||||
|
name: fluent
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 1h
|
||||||
|
url: https://fluent.github.io/helm-charts
|
||||||
@ -2,6 +2,7 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
resources:
|
resources:
|
||||||
|
- fluent-bit.yaml
|
||||||
- grafana.yaml
|
- grafana.yaml
|
||||||
- hashicorp.yaml
|
- hashicorp.yaml
|
||||||
- jetstack.yaml
|
- jetstack.yaml
|
||||||
|
|||||||
99
services/logging/fluent-bit-helmrelease.yaml
Normal file
99
services/logging/fluent-bit-helmrelease.yaml
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
# services/logging/fluent-bit-helmrelease.yaml
|
||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: fluent-bit
|
||||||
|
namespace: logging
|
||||||
|
spec:
|
||||||
|
interval: 15m
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: fluent-bit
|
||||||
|
version: "~0.46.0"
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: fluent
|
||||||
|
namespace: flux-system
|
||||||
|
values:
|
||||||
|
serviceAccount:
|
||||||
|
create: true
|
||||||
|
rbac:
|
||||||
|
create: true
|
||||||
|
tolerations:
|
||||||
|
- key: node-role.kubernetes.io/control-plane
|
||||||
|
operator: Exists
|
||||||
|
effect: NoSchedule
|
||||||
|
- key: node-role.kubernetes.io/master
|
||||||
|
operator: Exists
|
||||||
|
effect: NoSchedule
|
||||||
|
extraVolumes:
|
||||||
|
- name: runlogjournal
|
||||||
|
hostPath:
|
||||||
|
path: /run/log/journal
|
||||||
|
- name: varlogjournal
|
||||||
|
hostPath:
|
||||||
|
path: /var/log/journal
|
||||||
|
extraVolumeMounts:
|
||||||
|
- name: runlogjournal
|
||||||
|
mountPath: /run/log/journal
|
||||||
|
readOnly: true
|
||||||
|
- name: varlogjournal
|
||||||
|
mountPath: /var/log/journal
|
||||||
|
readOnly: true
|
||||||
|
config:
|
||||||
|
service: |
|
||||||
|
[SERVICE]
|
||||||
|
Flush 1
|
||||||
|
Log_Level info
|
||||||
|
Daemon Off
|
||||||
|
Parsers_File parsers.conf
|
||||||
|
Parsers_File custom_parsers.conf
|
||||||
|
HTTP_Server On
|
||||||
|
HTTP_Listen 0.0.0.0
|
||||||
|
HTTP_Port 2020
|
||||||
|
inputs: |
|
||||||
|
[INPUT]
|
||||||
|
Name tail
|
||||||
|
Tag kube.*
|
||||||
|
Path /var/log/containers/*.log
|
||||||
|
Parser cri
|
||||||
|
Mem_Buf_Limit 50MB
|
||||||
|
Skip_Long_Lines On
|
||||||
|
Refresh_Interval 10
|
||||||
|
Rotate_Wait 30
|
||||||
|
storage.type memory
|
||||||
|
|
||||||
|
[INPUT]
|
||||||
|
Name systemd
|
||||||
|
Tag journald.*
|
||||||
|
Read_From_Tail On
|
||||||
|
storage.type memory
|
||||||
|
filters: |
|
||||||
|
[FILTER]
|
||||||
|
Name kubernetes
|
||||||
|
Match kube.*
|
||||||
|
Kube_URL https://kubernetes.default.svc:443
|
||||||
|
Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
||||||
|
Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
|
||||||
|
Merge_Log On
|
||||||
|
Keep_Log Off
|
||||||
|
K8S-Logging.Parser On
|
||||||
|
K8S-Logging.Exclude On
|
||||||
|
outputs: |
|
||||||
|
[OUTPUT]
|
||||||
|
Name loki
|
||||||
|
Match kube.*
|
||||||
|
Host loki.logging.svc.cluster.local
|
||||||
|
Port 3100
|
||||||
|
Labels {job="fluent-bit", namespace="$kubernetes['namespace_name']", pod="$kubernetes['pod_name']", container="$kubernetes['container_name']"}
|
||||||
|
LabelKeys stream
|
||||||
|
Line_Format json
|
||||||
|
|
||||||
|
[OUTPUT]
|
||||||
|
Name loki
|
||||||
|
Match journald.*
|
||||||
|
Host loki.logging.svc.cluster.local
|
||||||
|
Port 3100
|
||||||
|
Labels {job="systemd"}
|
||||||
|
LabelKeys _SYSTEMD_UNIT,_HOSTNAME,SYSLOG_IDENTIFIER
|
||||||
|
Line_Format json
|
||||||
25
services/logging/ingress.yaml
Normal file
25
services/logging/ingress.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# services/logging/ingress.yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: loki
|
||||||
|
namespace: logging
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt
|
||||||
|
spec:
|
||||||
|
ingressClassName: traefik
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- logs.bstein.dev
|
||||||
|
secretName: logs-tls
|
||||||
|
rules:
|
||||||
|
- host: logs.bstein.dev
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: oauth2-proxy-loki
|
||||||
|
port:
|
||||||
|
name: http
|
||||||
9
services/logging/kustomization.yaml
Normal file
9
services/logging/kustomization.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# services/logging/kustomization.yaml
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources:
|
||||||
|
- namespace.yaml
|
||||||
|
- loki-helmrelease.yaml
|
||||||
|
- fluent-bit-helmrelease.yaml
|
||||||
|
- oauth2-proxy.yaml
|
||||||
|
- ingress.yaml
|
||||||
59
services/logging/loki-helmrelease.yaml
Normal file
59
services/logging/loki-helmrelease.yaml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
# services/logging/loki-helmrelease.yaml
|
||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: loki
|
||||||
|
namespace: logging
|
||||||
|
spec:
|
||||||
|
interval: 15m
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: loki
|
||||||
|
version: "~6.6.0"
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: grafana
|
||||||
|
namespace: flux-system
|
||||||
|
values:
|
||||||
|
fullnameOverride: loki
|
||||||
|
deploymentMode: SingleBinary
|
||||||
|
loki:
|
||||||
|
auth_enabled: false
|
||||||
|
commonConfig:
|
||||||
|
replication_factor: 1
|
||||||
|
storage:
|
||||||
|
type: filesystem
|
||||||
|
storageConfig:
|
||||||
|
filesystem:
|
||||||
|
directory: /var/loki/chunks
|
||||||
|
tsdb_shipper:
|
||||||
|
active_index_directory: /var/loki/index
|
||||||
|
cache_location: /var/loki/index_cache
|
||||||
|
schemaConfig:
|
||||||
|
configs:
|
||||||
|
- from: 2024-01-01
|
||||||
|
store: tsdb
|
||||||
|
object_store: filesystem
|
||||||
|
schema: v13
|
||||||
|
index:
|
||||||
|
prefix: loki_index_
|
||||||
|
period: 24h
|
||||||
|
compactor:
|
||||||
|
working_directory: /var/loki/compactor
|
||||||
|
shared_store: filesystem
|
||||||
|
retention_enabled: true
|
||||||
|
delete_request_store: filesystem
|
||||||
|
limits_config:
|
||||||
|
retention_period: 4320h
|
||||||
|
reject_old_samples: true
|
||||||
|
reject_old_samples_max_age: 168h
|
||||||
|
singleBinary:
|
||||||
|
replicas: 1
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
size: 200Gi
|
||||||
|
storageClass: asteria
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
5
services/logging/namespace.yaml
Normal file
5
services/logging/namespace.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# services/logging/namespace.yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: logging
|
||||||
101
services/logging/oauth2-proxy.yaml
Normal file
101
services/logging/oauth2-proxy.yaml
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
# services/logging/oauth2-proxy.yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: oauth2-proxy-loki
|
||||||
|
namespace: logging
|
||||||
|
labels:
|
||||||
|
app: oauth2-proxy-loki
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 80
|
||||||
|
targetPort: 4180
|
||||||
|
selector:
|
||||||
|
app: oauth2-proxy-loki
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: oauth2-proxy-loki
|
||||||
|
namespace: logging
|
||||||
|
labels:
|
||||||
|
app: oauth2-proxy-loki
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: oauth2-proxy-loki
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: oauth2-proxy-loki
|
||||||
|
spec:
|
||||||
|
nodeSelector:
|
||||||
|
node-role.kubernetes.io/worker: "true"
|
||||||
|
affinity:
|
||||||
|
nodeAffinity:
|
||||||
|
preferredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
- weight: 90
|
||||||
|
preference:
|
||||||
|
matchExpressions:
|
||||||
|
- key: hardware
|
||||||
|
operator: In
|
||||||
|
values: ["rpi5","rpi4"]
|
||||||
|
containers:
|
||||||
|
- name: oauth2-proxy
|
||||||
|
image: quay.io/oauth2-proxy/oauth2-proxy:v7.6.0
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
args:
|
||||||
|
- --provider=oidc
|
||||||
|
- --redirect-url=https://logs.bstein.dev/oauth2/callback
|
||||||
|
- --oidc-issuer-url=https://sso.bstein.dev/realms/atlas
|
||||||
|
- --scope=openid profile email groups
|
||||||
|
- --email-domain=*
|
||||||
|
- --set-xauthrequest=true
|
||||||
|
- --pass-access-token=true
|
||||||
|
- --set-authorization-header=true
|
||||||
|
- --cookie-secure=true
|
||||||
|
- --cookie-samesite=lax
|
||||||
|
- --cookie-refresh=20m
|
||||||
|
- --cookie-expire=168h
|
||||||
|
- --insecure-oidc-allow-unverified-email=true
|
||||||
|
- --upstream=http://loki.logging.svc.cluster.local:3100
|
||||||
|
- --http-address=0.0.0.0:4180
|
||||||
|
- --skip-provider-button=true
|
||||||
|
- --skip-jwt-bearer-tokens=true
|
||||||
|
- --oidc-groups-claim=groups
|
||||||
|
- --cookie-domain=logs.bstein.dev
|
||||||
|
env:
|
||||||
|
- name: OAUTH2_PROXY_CLIENT_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: oauth2-proxy-loki-oidc
|
||||||
|
key: client_id
|
||||||
|
- name: OAUTH2_PROXY_CLIENT_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: oauth2-proxy-loki-oidc
|
||||||
|
key: client_secret
|
||||||
|
- name: OAUTH2_PROXY_COOKIE_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: oauth2-proxy-loki-oidc
|
||||||
|
key: cookie_secret
|
||||||
|
ports:
|
||||||
|
- containerPort: 4180
|
||||||
|
name: http
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /ping
|
||||||
|
port: 4180
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 10
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /ping
|
||||||
|
port: 4180
|
||||||
|
initialDelaySeconds: 20
|
||||||
|
periodSeconds: 20
|
||||||
@ -320,6 +320,13 @@ spec:
|
|||||||
timeInterval: "15s"
|
timeInterval: "15s"
|
||||||
uid: atlas-vm
|
uid: atlas-vm
|
||||||
orgId: 2
|
orgId: 2
|
||||||
|
- name: Loki
|
||||||
|
type: loki
|
||||||
|
access: proxy
|
||||||
|
url: http://loki.logging.svc.cluster.local:3100
|
||||||
|
isDefault: false
|
||||||
|
uid: atlas-loki
|
||||||
|
orgId: 1
|
||||||
dashboardProviders:
|
dashboardProviders:
|
||||||
dashboardproviders.yaml:
|
dashboardproviders.yaml:
|
||||||
apiVersion: 1
|
apiVersion: 1
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user