All Projects → last9 → k8stream

last9 / k8stream

Licence: Apache-2.0 license
Processing kubenetes events stream

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to k8stream

Tobs
tobs - The Observability Stack for Kubernetes. Easy install of a full observability stack into a k8s cluster with a CLI tool or Helm charts.
Stars: ✭ 186 (+481.25%)
Mutual labels:  kubernetes-monitoring, observability
Kube State Metrics
Add-on agent to generate and expose cluster-level metrics.
Stars: ✭ 3,433 (+10628.13%)
Mutual labels:  kubernetes-monitoring, observability
skywalking-banyandb
An observability database aims to ingest, analyze and store Metrics, Tracing and Logging data.
Stars: ✭ 111 (+246.88%)
Mutual labels:  observability
firehose
firehose: the metrics gateway for prometheus
Stars: ✭ 23 (-28.12%)
Mutual labels:  observability
open-telemetry-java-guides
Java OpenTelemetry 测试指南 :Open-Telemetry-Java-Guides 案例,用于测试常用中间件支持及 Otel 相关组件的使用情况。 可观察性Sig: https://i.cloudnative.to/observability/
Stars: ✭ 67 (+109.38%)
Mutual labels:  observability
cryostat-operator
An OpenShift Operator to facilitate setup and management of Cryostast and expose the Cryostat API through Kubernetes Custom Resources.
Stars: ✭ 25 (-21.87%)
Mutual labels:  observability
STAM
STAM, Streaming Topology Analysis Method
Stars: ✭ 26 (-18.75%)
Mutual labels:  observability
nestjs-otel
OpenTelemetry (Tracing + Metrics) module for Nest framework (node.js) 🔭
Stars: ✭ 273 (+753.13%)
Mutual labels:  observability
stackdriver-reverse-proxy
Simple HTTP proxy to automatically traces the incoming requests
Stars: ✭ 41 (+28.13%)
Mutual labels:  observability
trouble-training
FullStack DDD/CQRS with GraphQL workshop including distributed tracing and monitoring. This shows the configuration from React frontend to .Net backend.
Stars: ✭ 271 (+746.88%)
Mutual labels:  observability
easeagent
An agent component for the Java system
Stars: ✭ 437 (+1265.63%)
Mutual labels:  observability
beefheart
A tool to index Fastly realtime analytics metrics into Elasticsearch.
Stars: ✭ 14 (-56.25%)
Mutual labels:  observability
k8s-istio-observe-frontend
Angular 12-based front-end UI for k8s Golang observability project: https://github.com/garystafford/k8s-istio-observe-backend/tree/2021-istio
Stars: ✭ 20 (-37.5%)
Mutual labels:  observability
realopinsight
✔️ Measure and observe end-user applications availability - Define and track SLA/SLO targets through Prometheus-alike metrics and built-in reports - Kubernetes®, Zabbix®, Nagios®.
Stars: ✭ 55 (+71.88%)
Mutual labels:  observability
skywalking-query-protocol
Query Protocol for Apache SkyWalking in GraphQL format
Stars: ✭ 45 (+40.63%)
Mutual labels:  observability
sqlmetrics
Prometheus metrics for Go database/sql via VictoriaMetrics/metrics
Stars: ✭ 21 (-34.37%)
Mutual labels:  observability
esp-insights
ESP Insights: A remote diagnostics/observability framework for connected devices
Stars: ✭ 31 (-3.12%)
Mutual labels:  observability
grafana-operator
An operator for Grafana that installs and manages Grafana instances, Dashboards and Datasources through Kubernetes/OpenShift CRs
Stars: ✭ 449 (+1303.13%)
Mutual labels:  observability
datadog-actions-metrics
Send GitHub Actions metrics to Datadog
Stars: ✭ 27 (-15.62%)
Mutual labels:  observability
go2sky-plugins
The plugins of go2sky
Stars: ✭ 46 (+43.75%)
Mutual labels:  observability

K8stream License Build Status

Logo|512x397, 50%

Background

Kubernetes events are an excellent source of information to monitor and debug the state of your Services. Kubernetes API server emits events whenever there is a change in some resource it manages. These events are typically stored in etcd for some time and can be observed when you run kubectl get events or kubectl describe.

Typical metadata in every event includes entity kind (pod, deployment etc), state (warning, normal, error), reason and message.

There are no tools for running analytics on top of it to figure out root causes of outages. This is where k8stream comes in as a pipeline to ingest events.

Overview

K8stream is a tool you can use to:

  • Ingest Kubernetes events to a Sink for Offline analytics
  • Find correlation with services under Impact

Principles

  • Goal is to enable storing events for post-hoc analysis
  • Pods are cattle, Services are Pets. Any change in cluster should find its association with the Service under Impact.
  • The overhead to the cluster should be minimal
  • All queries should be cached
  • Events stored in the sink should be batched
  • Configuration mode for Duplicates-Events vs No-Event-Loss

Non Goals

  • This does not provide a UI or a queryable interface
  • The storage is provided by the sink

Deploy

There are sample deployment files available at K8s YAMLs

In case on in-cluster deployment omit the "kubeconfig" parameter in JSON. Setting this as empty the code falls back to in-cluster authorization.

Detailed Design

Handling of events

  • Doesn't perform an event-by-event upload but instead uploads in batches
  • K8stream handles some basic de-duplication of events by checking the event cache if this entry has been processed. However, if the cache gets flushed or the k8stream binary gets restarted, it will start processing duplicate events.
  • The events are enriched with more metadata such as labels and annotations corresponding to the entity, node IP address etc.
  • Uses a highly concurrent Cache to avoid re-lookup.

Writing to sink

  • Uses asynchronous batching to write to Sink (only S3, File outout are supported for now)
  • Events are marshalled using protobuf.
  • Data written to sink is gzipped.
  • Avoids any local/intermediate files.
  • Resync allows to catch up with the Event stream if its lost momentarily.

Limitations

  • Because events from K8s can arrive out of order, though we try our best to de-deduplicate and order them, it cannot be guaranteed. It's advised to handle deduplication and ordering at consumer end.
  • K8stream does not handle the case of duplicate events after a restart. This is because the only deduplication that happens currently is by reading the local cache which gets flushed on a restart. This needs to be handled by the consumer of the stream.
  • This currently only supports writing to S3 and file output.

Future Work

  • Support for adding POD details to an event
  • Support for writing to more output streams
  • Adding more metadata like service name for the event

Development and Contribution

Please follow the Developer guide to setup and run k8stream in a local environment.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].