1.Dateien auf einem Host oder einer VM mitlesen
Der Filter record_modifier ergänzt die Felder, nach denen du filtern willst. _msg_field=log sagt UptimeEye, welcher Key die Nachricht enthält; json_date_key _time legt den Zeitstempel dort ab, wo UptimeEye ihn erwartet.
[SERVICE]
Flush 2
storage.path /var/lib/fluent-bit/buffer
[INPUT]
Name tail
Path /var/log/myapp/*.log
Tag myapp
Refresh_Interval 5
Skip_Long_Lines On
storage.type filesystem
[FILTER]
Name record_modifier
Match *
Record service myapp
Record env prod
Record host ${HOSTNAME}
[OUTPUT]
Name http
Match *
Host logs.uptimeeye.com
Port 443
tls On
URI /v1/ingest/jsonline?_msg_field=log&_stream_fields=service,env
Format json_lines
json_date_key _time
json_date_format iso8601
Header Authorization Bearer ue_ingest_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
compress gzip
Retry_Limit False2.Anwendungslogs in JSON? Mit einem Parser zerlegen
Ergänz einen Parser, damit jeder JSON-Key ein eigenes Feld wird statt eines undurchsichtigen log-Strings.
[INPUT]
Name tail
Path /var/log/myapp/*.log
Tag myapp
Parser json
# parsers.conf
[PARSER]
Name json
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L%z_msg_field passend, zum Beispiel _msg_field=message.3.Kubernetes
Behalte beim offiziellen Helm-Chart den kubernetes-Filter (er hängt Namespace, Pod und Container an) und richte den Output auf UptimeEye.
config:
outputs: |
[OUTPUT]
Name http
Match kube.*
Host logs.uptimeeye.com
Port 443
tls On
URI /v1/ingest/jsonline?_msg_field=log&_stream_fields=kubernetes.namespace_name,kubernetes.container_name
Format json_lines
json_date_key _time
json_date_format iso8601
Header Authorization Bearer ue_ingest_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
compress gzip4.Suchen
service:=myapp auf einem Host, kubernetes.container_name:=api auf Kubernetes. Verschachtelte Keys kommen als Feldnamen mit Punkten an.
Felder, die du bekommst
Diese Felder erscheinen im Panel „Felder“ und funktionieren in jedem Filter:
service,env,host(aus dem Filter)kubernetes.namespace_name,kubernetes.pod_name,kubernetes.container_nameauf Kubernetes- die JSON-Keys aus dem Parser
Tipps
- Mit
Retry_Limit Falseversucht Fluent Bit es aus dem Dateisystem-Puffer immer wieder, so kostet ein kurzer Netzaussetzer keine Zeilen. - Mehrzeilige Stacktraces: Setz vor den Output den eingebauten
multiline-Filter mitmultiline.parser java(oderpython,go). - Der Elasticsearch-Output von Fluent Bit geht auch:
Name es,Host logs.uptimeeye.com,Port 443,tls On,Path /v1/ingest/elasticsearch,HTTP_User key,HTTP_Passwd <ingest key>,Suppress_Type_Name On.
FAQ
Welchen Output nehme ich, http oder es?
http mit json_lines ist einfacher, und du kannst Ingest-Optionen in der URI mitgeben. Nimm es nur, wenn du schon eine Pipeline im Elasticsearch-Format hast.Wo bekomme ich den Ingest-Key?
ue_ingest_ und wird nur einmal angezeigt. Management-Keys (ue_live_) lehnt der Ingest-Endpoint ab.Wie sehe ich, ob Logs ankommen?
service:=<your service>. Neue Zeilen sind nach etwa einer Sekunde durchsuchbar; Live-Tail zeigt sie mit etwa 6 s Verzögerung.