init
This commit is contained in:
commit
36331e1d09
|
@ -0,0 +1,14 @@
|
||||||
|
apiVersion: "v1"
|
||||||
|
name: loki-stack
|
||||||
|
version: 2.6.1
|
||||||
|
appVersion: v2.1.0
|
||||||
|
kubeVersion: "^1.10.0-0"
|
||||||
|
description: "Loki: like Prometheus, but for logs."
|
||||||
|
home: https://grafana.com/loki
|
||||||
|
icon: https://raw.githubusercontent.com/grafana/loki/master/docs/sources/logo.png
|
||||||
|
sources:
|
||||||
|
- https://github.com/grafana/loki
|
||||||
|
maintainers:
|
||||||
|
- name: Loki Maintainers
|
||||||
|
email: lokiproject@googlegroups.com
|
||||||
|
engine: gotpl
|
|
@ -0,0 +1,24 @@
|
||||||
|
dependencies:
|
||||||
|
- name: loki
|
||||||
|
repository: https://grafana.github.io/helm-charts
|
||||||
|
version: 2.10.1
|
||||||
|
- name: promtail
|
||||||
|
repository: https://grafana.github.io/helm-charts
|
||||||
|
version: 2.2.0
|
||||||
|
- name: fluent-bit
|
||||||
|
repository: https://grafana.github.io/helm-charts
|
||||||
|
version: 2.3.0
|
||||||
|
- name: grafana
|
||||||
|
repository: https://grafana.github.io/helm-charts
|
||||||
|
version: 6.21.8
|
||||||
|
- name: prometheus
|
||||||
|
repository: https://prometheus-community.github.io/helm-charts
|
||||||
|
version: 15.0.4
|
||||||
|
- name: filebeat
|
||||||
|
repository: https://helm.elastic.co
|
||||||
|
version: 7.17.1
|
||||||
|
- name: logstash
|
||||||
|
repository: https://helm.elastic.co
|
||||||
|
version: 7.8.1
|
||||||
|
digest: sha256:18e9f3020b565448367602142683ed984b872ec4f9e4eb568f193341265ad550
|
||||||
|
generated: "2022-03-09T19:18:00.699336741-05:00"
|
|
@ -0,0 +1,29 @@
|
||||||
|
dependencies:
|
||||||
|
- name: "loki"
|
||||||
|
condition: loki.enabled
|
||||||
|
repository: "https://grafana.github.io/helm-charts"
|
||||||
|
version: "^2.3.0"
|
||||||
|
- name: "promtail"
|
||||||
|
condition: promtail.enabled
|
||||||
|
repository: "https://grafana.github.io/helm-charts"
|
||||||
|
version: "^2.2.0"
|
||||||
|
- name: "fluent-bit"
|
||||||
|
condition: fluent-bit.enabled
|
||||||
|
repository: "https://grafana.github.io/helm-charts"
|
||||||
|
version: "^2.2.0"
|
||||||
|
- name: "grafana"
|
||||||
|
condition: grafana.enabled
|
||||||
|
version: "~6.21.2"
|
||||||
|
repository: "https://grafana.github.io/helm-charts"
|
||||||
|
- name: "prometheus"
|
||||||
|
condition: prometheus.enabled
|
||||||
|
version: "~15.0.1"
|
||||||
|
repository: "https://prometheus-community.github.io/helm-charts"
|
||||||
|
- name: "filebeat"
|
||||||
|
condition: filebeat.enabled
|
||||||
|
version: "~7.17.0"
|
||||||
|
repository: "https://helm.elastic.co"
|
||||||
|
- name: "logstash"
|
||||||
|
condition: logstash.enabled
|
||||||
|
version: "~7.8.0"
|
||||||
|
repository: "https://helm.elastic.co"
|
|
@ -0,0 +1,3 @@
|
||||||
|
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
|
||||||
|
|
||||||
|
See http://docs.grafana.org/features/datasources/loki/ for more detail.
|
|
@ -0,0 +1,58 @@
|
||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "loki-stack.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "loki-stack.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "loki-stack.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Override the naming defined by the prometheus chart.
|
||||||
|
Added as a fix for https://github.com/grafana/loki/issues/1169
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.fullname" -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name "prometheus-server" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
The service name to connect to Loki. Defaults to the same logic as "loki.fullname"
|
||||||
|
*/}}
|
||||||
|
{{- define "loki.serviceName" -}}
|
||||||
|
{{- if .Values.loki.serviceName -}}
|
||||||
|
{{- .Values.loki.serviceName -}}
|
||||||
|
{{- else if .Values.loki.fullnameOverride -}}
|
||||||
|
{{- .Values.loki.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default "loki" .Values.loki.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,31 @@
|
||||||
|
{{- if .Values.grafana.sidecar.datasources.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ template "loki-stack.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "loki-stack.name" . }}
|
||||||
|
chart: {{ template "loki-stack.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
grafana_datasource: "1"
|
||||||
|
data:
|
||||||
|
loki-stack-datasource.yaml: |-
|
||||||
|
apiVersion: 1
|
||||||
|
datasources:
|
||||||
|
{{- if .Values.loki.enabled }}
|
||||||
|
- name: Loki
|
||||||
|
type: loki
|
||||||
|
access: proxy
|
||||||
|
url: http://{{(include "loki.serviceName" .)}}:{{ .Values.loki.service.port }}
|
||||||
|
version: 1
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.prometheus.enabled }}
|
||||||
|
- name: Prometheus
|
||||||
|
type: prometheus
|
||||||
|
access: proxy
|
||||||
|
url: http://{{ include "prometheus.fullname" .}}:{{ .Values.prometheus.server.service.servicePort }}{{ .Values.prometheus.server.prefixURL }}
|
||||||
|
version: 1
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
|
@ -0,0 +1,52 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ template "loki-stack.fullname" . }}-test
|
||||||
|
labels:
|
||||||
|
app: {{ template "loki-stack.name" . }}
|
||||||
|
chart: {{ template "loki-stack.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
data:
|
||||||
|
test.sh: |
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
LOKI_URI="http://${LOKI_SERVICE}:${LOKI_PORT}"
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
apk add -u curl jq
|
||||||
|
until (curl -s ${LOKI_URI}/api/prom/label/app/values | jq -e '.values[] | select(. == "loki")'); do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "Has labels" {
|
||||||
|
curl -s ${LOKI_URI}/api/prom/label | \
|
||||||
|
jq -e '.values[] | select(. == "app")'
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "Query log entry" {
|
||||||
|
curl -sG ${LOKI_URI}/api/prom/query?limit=10 --data-urlencode 'query={app="loki"}' | \
|
||||||
|
jq -e '.streams[].entries | length >= 1'
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "Push log entry legacy" {
|
||||||
|
local timestamp=$(date -Iseconds -u | sed 's/UTC/.000000000+00:00/')
|
||||||
|
local data=$(jq -n --arg timestamp "${timestamp}" '{"streams": [{"labels": "{app=\"loki-test\"}", "entries": [{"ts": $timestamp, "line": "foobar"}]}]}')
|
||||||
|
|
||||||
|
curl -s -X POST -H "Content-Type: application/json" ${LOKI_URI}/api/prom/push -d "${data}"
|
||||||
|
|
||||||
|
curl -sG ${LOKI_URI}/api/prom/query?limit=1 --data-urlencode 'query={app="loki-test"}' | \
|
||||||
|
jq -e '.streams[].entries[].line == "foobar"'
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "Push log entry" {
|
||||||
|
local timestamp=$(date +%s000000000)
|
||||||
|
local data=$(jq -n --arg timestamp "${timestamp}" '{"streams": [{"stream": {"app": "loki-test"}, "values": [[$timestamp, "foobar"]]}]}')
|
||||||
|
|
||||||
|
curl -s -X POST -H "Content-Type: application/json" ${LOKI_URI}/loki/api/v1/push -d "${data}"
|
||||||
|
|
||||||
|
curl -sG ${LOKI_URI}/api/prom/query?limit=1 --data-urlencode 'query={app="loki-test"}' | \
|
||||||
|
jq -e '.streams[].entries[].line == "foobar"'
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test-success
|
||||||
|
labels:
|
||||||
|
app: {{ template "loki-stack.name" . }}
|
||||||
|
chart: {{ template "loki-stack.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
name: {{ template "loki-stack.fullname" . }}-test
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: test
|
||||||
|
image: bats/bats:v1.1.0
|
||||||
|
args:
|
||||||
|
- /var/lib/loki/test.sh
|
||||||
|
env:
|
||||||
|
- name: LOKI_SERVICE
|
||||||
|
value: {{ template "loki.serviceName" . }}
|
||||||
|
- name: LOKI_PORT
|
||||||
|
value: "{{ .Values.loki.service.port }}"
|
||||||
|
volumeMounts:
|
||||||
|
- name: tests
|
||||||
|
mountPath: /var/lib/loki
|
||||||
|
restartPolicy: Never
|
||||||
|
volumes:
|
||||||
|
- name: tests
|
||||||
|
configMap:
|
||||||
|
name: {{ template "loki-stack.fullname" . }}-test
|
|
@ -0,0 +1,78 @@
|
||||||
|
|
||||||
|
loki:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
grafana:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# TODO change this
|
||||||
|
adminPassword: prom-operator
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: nginx
|
||||||
|
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
hosts:
|
||||||
|
- grafana.ing
|
||||||
|
|
||||||
|
prometheus:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
filebeat:
|
||||||
|
enabled: true
|
||||||
|
filebeatConfig:
|
||||||
|
filebeat.yml: |
|
||||||
|
logging.level: debug
|
||||||
|
filebeat.inputs:
|
||||||
|
- type: container
|
||||||
|
paths:
|
||||||
|
- /var/log/containers/*.log
|
||||||
|
processors:
|
||||||
|
- add_kubernetes_metadata:
|
||||||
|
host: ${NODE_NAME}
|
||||||
|
matchers:
|
||||||
|
- logs_path:
|
||||||
|
logs_path: "/var/log/containers/"
|
||||||
|
output.logstash:
|
||||||
|
hosts: ["logstash-loki:5044"]
|
||||||
|
|
||||||
|
logstash:
|
||||||
|
enabled: true
|
||||||
|
image: grafana/logstash-output-loki
|
||||||
|
imageTag: 1.0.1
|
||||||
|
filters:
|
||||||
|
main: |-
|
||||||
|
filter {
|
||||||
|
if [kubernetes] {
|
||||||
|
mutate {
|
||||||
|
add_field => {
|
||||||
|
"container_name" => "%{[kubernetes][container][name]}"
|
||||||
|
"namespace" => "%{[kubernetes][namespace]}"
|
||||||
|
"pod" => "%{[kubernetes][pod][name]}"
|
||||||
|
}
|
||||||
|
replace => { "host" => "%{[kubernetes][node][name]}"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mutate {
|
||||||
|
remove_field => ["tags"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
outputs:
|
||||||
|
main: |-
|
||||||
|
output {
|
||||||
|
loki {
|
||||||
|
url => "http://loki:3100/loki/api/v1/push"
|
||||||
|
username => "test"
|
||||||
|
password => "test"
|
||||||
|
}
|
||||||
|
# stdout { codec => rubydebug }
|
||||||
|
}
|
||||||
|
|
||||||
|
promtail:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
fluent-bit:
|
||||||
|
enabled: false
|
||||||
|
|
Loading…
Reference in New Issue