Practicing microservices observability.
Alternatives To Horus
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
5 days ago67apache-2.0Go
The API traffic analyzer for Kubernetes providing real-time K8s protocol-level visibility, capturing and monitoring all traffic and payloads going in, out and across containers, pods, nodes and clusters.. Think TCPDump and Wireshark re-invented for Kubernetes
Micrometer3,84925845413 hours ago137September 12, 2022351apache-2.0Java
An application observability facade for the most popular observability tools. Think SLF4J, but for observability.
4 days ago8bsd-3-clauseJava
High performance Java APM. Powered by ASM. Try it. Test it. If you feel its better, use it.
Osm2,562813 hours ago359September 06, 202244apache-2.0Go
Open Service Mesh (OSM) is a lightweight, extensible, cloud native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for highly dynamic microservice environments.
20 hours ago6apache-2.0Go
A zero-instrumentation observability tool for microservice architectures.
Swagger Stats7882312a month ago34July 02, 202153mitJavaScript
API Observability. Trace API calls and Monitor API performance, health and usage statistics in Node.js Microservices.
11 days ago10apache-2.0Java
An agent component for the Java system
4 months ago12apache-2.0Go
A service mesh implementation for connecting, control, and observe services in spring-cloud.
14 hours ago60apache-2.0Go
Intelligent Load Management for Cloud Native Applications
Network Mapper159
3 days ago1apache-2.0Go
Map Kubernetes in-cluster traffic and export as text, intents, or an image
Alternatives To Horus
Select To Compare

Alternative Project Comparisons


A project for learning about microservices observability.

  • Centralized Logging
  • Distributed Tracing

Development Requirements

  • Docker Compose v1.23.2
  • OSX or GNU/Linux

Development Setup

  1. Clone this repo and open the root folder in an IDE like Visual Studio Code.

  2. For each microservice, rename example.env to .env and supply the needed secrets.

    TODO: Eliminate this friction.

  3. Start all microservices in development mode.

     docker-compose -f docker-compose.dev.yml \
         up -d --build

    In Development Mode

    • You can attach a remote debugger to a running service Docker for seemless debugging like placing breakpoints and watching variables.
    • Changes to source files will automatically restart the corresponding docker service.
  4. Optionally, attach the IDE's debugger to a service as follows in Visual Studio Code: shift+cmd+D > Select a debug configuration > F5.

    All vscode debug configurations are stored in .vscode/launch.json. You can modify configs as you see fit.

  5. Visit http://localhost:16686 to view traces.

Useful dev commands

# list all running services
docker-compose -f docker-compose.dev.yml ps

# stop all services
docker-compose -f docker-compose.dev.yml down

# restart all [or specific] service
docker-compose -f docker-compose.dev.yml \
    up -d --no-deps --build [service-name]

# tail logs from all [or specific] service
docker-compose -f docker-compose.dev.yml \
    logs -f [service-name]
# see how an image was built
docker history <image-name>

Project Architecture

Logging Infrastructure

Read this article for more details.

Tracing Infrastructure

Tracing Backend Architecture

Read this article for more details.

Miscellaneous Notes

TODO (Improvement Considerations)

  • Research jaeger-operator

  • Name Duplication: The value of the API_SERVER_ADDRESS variable in user-simulator/.env depends on the service name api-server specified in docker-compose.yml. If we rename the service, we must also change the variable. Is there a way to make this DRY?

  • In the log-shipper container, I had to install a logz.io-specific plugin. Can't this step be eliminated since fluentd is capable of connecting to https endpoints without plugins?

  • Use sub-second precision for fluentd timestamps (probably best to use nanoseconds.)

Best practices

  1. You can pass secrets for a microservice using the env_file attribute in docker-compose.yml.
  2. Microservices can communicate using their service names if they are in the same docker network.

Docker Networking

By default each containerized process runs in an isolated network namespace. For inter-container communication, place them in the same network namespace.


Popular Observability Projects
Popular Microservices Projects
Popular Operations Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Distributed Tracing