All Projects → eyeezzi → horus

eyeezzi / horus

Licence: other
Practicing microservices observability.

Programming Languages

shell
77523 projects
javascript
184084 projects - #8 most used programming language
Dockerfile
14818 projects

Projects that are alternatives of or similar to horus

Csharp Netcore
OpenTracing instrumentation for .NET Core & .NET 5 apps
Stars: ✭ 225 (+1400%)
Mutual labels:  distributed-tracing
haystack-docker
Repository with docker-compose files to start Haystack components in sandbox
Stars: ✭ 17 (+13.33%)
Mutual labels:  distributed-tracing
nodejs
Node.js in-process collectors for Instana
Stars: ✭ 66 (+340%)
Mutual labels:  distributed-tracing
Dd Trace Java
Datadog APM client for Java
Stars: ✭ 228 (+1420%)
Mutual labels:  distributed-tracing
eagle
Eagle分布式rpc调用,借助Zookeeper实现服务注册和发现,基于AQS实现高性能连接池,支持分布式追踪、监控、过载保护等配置。提供Spring和SpringBoot插件,方便与Spring和SpringBoot集成。
Stars: ✭ 77 (+413.33%)
Mutual labels:  distributed-tracing
Petabridge.Tracing.ApplicationInsights
OpenTracing adapter for Microsoft Application Insights
Stars: ✭ 30 (+100%)
Mutual labels:  distributed-tracing
Kspan
Turning Kubernetes Events into spans
Stars: ✭ 187 (+1146.67%)
Mutual labels:  distributed-tracing
docker-logspout-elk
Docker-compose yml file with logspout and ELK stack
Stars: ✭ 28 (+86.67%)
Mutual labels:  centralized-logging
opentracing-istio-troubleshooting
Tackle the challenge of observability in a Kubernetes application that consists of multiple microservices running in the Open Liberty application server.
Stars: ✭ 16 (+6.67%)
Mutual labels:  distributed-tracing
lambda-python
SignalFx AWS Lambda Python Wrapper
Stars: ✭ 15 (+0%)
Mutual labels:  distributed-tracing
Applicationinsights Node.js
Microsoft Application Insights SDK for Node.js
Stars: ✭ 229 (+1426.67%)
Mutual labels:  distributed-tracing
Opencensus Node
A stats collection and distributed tracing framework
Stars: ✭ 249 (+1560%)
Mutual labels:  distributed-tracing
dd-trace-php
[DEPRECATED] Use https://github.com/dataDog/dd-trace-php instead
Stars: ✭ 18 (+20%)
Mutual labels:  distributed-tracing
Zipkin
Zipkin is a distributed tracing system
Stars: ✭ 14,969 (+99693.33%)
Mutual labels:  distributed-tracing
skywalking-python
The Python agent for Apache SkyWalking
Stars: ✭ 152 (+913.33%)
Mutual labels:  distributed-tracing
Applicationinsights Home
Application Insights main repository for documentation of overall SDK offerings for all platforms.
Stars: ✭ 221 (+1373.33%)
Mutual labels:  distributed-tracing
kiev
A set of tools to do distributed logging for Ruby web applications
Stars: ✭ 46 (+206.67%)
Mutual labels:  distributed-tracing
smallrye-opentracing
An MicroProfile-OpenTracing implementation
Stars: ✭ 17 (+13.33%)
Mutual labels:  distributed-tracing
blogr-pve
Puppet provisioning of HA failover/cluster environment implemented in Proxmox Virtual Environment and Linux boxes.
Stars: ✭ 28 (+86.67%)
Mutual labels:  centralized-logging
DataToken
Decentralized access control middleware for data exchange and monetization
Stars: ✭ 17 (+13.33%)
Mutual labels:  distributed-tracing

Horus

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.

References

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].