{"id":15297554,"url":"https://github.com/frankchen021/bithon","last_synced_at":"2026-03-10T04:08:08.708Z","repository":{"id":39760373,"uuid":"345937925","full_name":"FrankChen021/bithon","owner":"FrankChen021","description":"An full stack observability platform","archived":false,"fork":false,"pushed_at":"2025-04-10T15:04:59.000Z","size":18006,"stargazers_count":20,"open_issues_count":47,"forks_count":6,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-11T01:13:23.941Z","etag":null,"topics":["agent","alerting","apm","diagnosis","java","logging","metrics","opentelemetry","tracing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FrankChen021.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-03-09T08:39:02.000Z","updated_at":"2025-04-06T13:58:14.000Z","dependencies_parsed_at":"2023-10-28T09:20:21.520Z","dependency_job_id":"662bd9fd-4a67-4a78-82c3-17e9ac0cb5a8","html_url":"https://github.com/FrankChen021/bithon","commit_stats":{"total_commits":726,"total_committers":3,"mean_commits":242.0,"dds":0.03994490358126723,"last_synced_commit":"4c9db7593e65f6fe3dd62f58502e648866a6a9ae"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FrankChen021%2Fbithon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FrankChen021%2Fbithon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FrankChen021%2Fbithon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FrankChen021%2Fbithon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FrankChen021","download_url":"https://codeload.github.com/FrankChen021/bithon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248322571,"owners_count":21084337,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","alerting","apm","diagnosis","java","logging","metrics","opentelemetry","tracing"],"created_at":"2024-09-30T19:18:17.271Z","updated_at":"2026-03-10T04:08:08.699Z","avatar_url":"https://github.com/FrankChen021.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://app.travis-ci.com/FrankChen021/bithon.svg?branch=master)](https://app.travis-ci.com/github/FrankChen021/bithon)\n\n---\n\n# Introduction\n\nBithon is a word combining binocular together with python.\n\nIt targets application metrics, logging, distributed tracing, alert and application risk governance under microservice environment.\n\n## Architecture\n\n![architecture.png](doc/intro/architecture.png)\n\nThe above pic illustrates the main components of this project, including:\n- Agent, which collects metrics/tracing logs automatically from client application without any code modification at the application side\n- Collector, which provides various interfaces (including OpenTelemetry GRPC interface) to receive metrics/tracing logs from clients\n- Pipeline, which provides a flexible and robust way to hande small data scale to an extra huge data scale for incoming metrics or tracing logs\n- Storage, which provides an abstraction to underlying storages like H2, MySQL or Clickhouse\n- Alerting, which allows us to set up alerts by using MetricSQL style expression on existing metrics or tracing logs and data in external storages\n- Web, which provides NextJS-based web page for metrics/tracing/alerting visualization \n\n## Highlights\n\n- **Comprehensive Metrics**\n  - Over 200 built-in metrics covering JDK internals and popular Java middlewares such as Apache Http Components.\n- **Advanced Distributed Tracing**\n  - Seamless compatibility with major tracing context propagation formats, including:\n    - OpenTelemetry\n    - Zipkin\n    - Jaeger\n    - Pinpoint\n  - Multi-channel span log ingestion:\n    - OpenTelemetry via GRPC or HTTP\n    - Zipkin via HTTP\n    - Jaeger Thrift via HTTP or UDP\n\n- **Intelligent Logging**\n  - Automatic injection of traceId/spanId into logs, requiring zero code changes in client applications.\n  - Trace context enrichment even when distributed tracing is disabled.\n\n- **Deep Profiling \u0026 Diagnostics**\n  - Real-time JMX bean inspection for target applications.\n  - Live and continuous thread dump analysis.\n  - Continuous CPU and memory profiling for in-depth performance insights.\n\n- **Powerful Alerting**\n  - PromQL-style alerting expressions for flexible, real-time monitoring and incident response.\n\n- **Flexible Deployment**\n  - Adaptable architecture for both small-scale and massive-scale data environments.\n    - Single all-in-one JAR for quick evaluation and lightweight use cases.\n    - Modular, component-based deployment for huge-scale scenarios.\n  - Effortless horizontal scaling to handle over 100TiB of data.\n\n- **Exceptional Cost Efficiency**\n  - Ultra-fast queries and minimal storage overhead, powered by ClickHouse integration.\n\n# Preview\n\nYou can use the [docker-compose.yml](docker/docker-compose.yml) to start the whole system for preview.\n\n```bash\ndocker-compose -f docker/docker-compose.yml up\n```\n\nOnce all services in the docker-compose are up, you can visit http://localhost:9900 to access UI.\nAnd by default, the application itself is configured to be self-monitored, you will see the metrics/tracing of the application itself.\n\n\n\n## Demo\nA demo is provided by this [demo repo](https://github.com/FrankChen021/bithon-demo) with a docker-compose file.\nYou can follow the README on that demo repo to start the demo within just 3 steps.\n\n# Build\n\n## 1. Clone source code\n\nAfter cloning this project along with all submodules by following commands\n\n```bash\ngit clone https://github.com/FrankChen021/bithon.git\ncd bithon \u0026\u0026 git submodule update --init\n```\n\n## 2. Configure JDK\n\nJDK 17 and above are required to build this project.\nIf you have multiple JDKs on your machine, use `export JAVA_HOME={YOUR_JDK_HOME}` command to set correct JDK. \nFor example\n\n```bash\nexport JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home\n```\n\n## 3. Build the project\n\nFor the first time to build this project, use the following command to build dependencies first: \n\n```bash\nmvn clean install --activate-profiles shaded,jooq -T 1C\n```\n\nand then execute the following command to build the project. \n\n```bash\nmvn clean install -DskipTests -T 1C\n```\n\nAfter the first build, we don't need to build the dependencies anymore unless there are changes in these dependencies.\n\n# Run\n\nOnce the project has been built, you could run the project in a standalone mode to evaluate this project.\n\n## 1. Launch the backend services all in one\n\nTo launch server in evaluation mode, execute the following command:\n\n```bash\njava -Dspring.profiles.active=all-in-one -jar server/server-starter/target/server-starter.jar\n```\n\nBy default, the application opens and listens on following ports at local\n\n| Function | Port |\n|----------|------|\n| tracing  | 9895 |\n| event    | 9896 |\n| metric   | 9898 |\n| ctrl     | 9899 |\n| web      | 9897 |\n\n\u003e Note:\n\u003e `-Dspring.profiles.include` parameter here is just for demo.\n\u003e \n\u003e You can make changes to `server/server-starter/src/main/resources/application.yml` to reflect your own settings.\n\u003e \n\u003e You can also use enable [Alibaba Nacos](doc/configuration/server/configuration-nacos.md) as your configuration storage center.\n\n## 2. Attach agent to your target Java applications\n\nAttach the agent to your java application so that your application can be managed the agent.\nAdd the following VM arguments to your target Java application.\n\n```bash\n-javaagent:\u003cYOUR_PROJECT_DIRECTORY\u003e/agent/agent-distribution/target/agent-distribution/agent-main.jar -Dbithon.application.name=\u003cYOUR_APPLICATION_NAME\u003e -Dbithon.application.env=\u003cYOUR_APPLICATION_ENV\u003e\n```\n\n| Variable               | Description                                                                                                              |\n|------------------------|--------------------------------------------------------------------------------------------------------------------------|\n| YOUR_PROJECT_DIRECTORY | the directory where this project saves                                                                                   |\n| YOUR_APPLICATION_NAME  | the name of your application. It could be any string                                                                     |\n| YOUR_APPLICATION_ENV   | the name of your environment to label your application. It could be any string. Usually it could be `dev`, `test`, `prd` |\n\nBy default, the agent connects collector running at local(127.0.0.1). \nCollector address could be changed in file `agent/agent-main/src/main/resources/agent.yml`.\nMake sure to re-build the project after changing the configuration file above.\n\n\u003e For production deployment, please refer to the [agent deployment doc](doc/deployment/agent-deployment.md) to deploy the agent to your target Java applications.\n\n# JDKs Compatibility\n\nEven the project is built by JDK 17 and above, the agent is compatible with JDK 1.8+.\nThe following matrix lists the JDKs that are compatible with the agent on macOS. \nAnd in theory, this matrix works both for Windows and Linux.\n\n| JDK           | Supported | \n|---------------|-----------|\n| JDK 1.8.0_291 | \u0026check;   |\n| JDK 9.0.4     | \u0026check;   |\n| JDK 10.0.2    | \u0026check;   |\n| JDK 11.0.12   | \u0026check;   |\n| JDK 12.0.2    | \u0026check;   |\n| JDK 13.0.2    | \u0026check;   |\n| JDK 14.0.2    | \u0026check;   |\n| JDK 15.0.2    | \u0026check;   |\n| JDK 16.02     | \u0026check;   |\n| JDK 17        | \u0026check;   |\n| JDK 21        | \u0026check;   |\n| JDK 22.0.2    | \u0026check;   |\n| JDK 23.0.2    | \u0026check;   |\n| JDK 24        | \u0026check;   |\n\n\u003e NOTE:\n\u003e For applications running on JDK 24, the agent may not work properly to handle tracing across threads.\n\n\n# Supported Components\n\n| Component                                                    | Min Version    | Max Version | Metrics                                        | Tracing |\n|--------------------------------------------------------------|----------------|-------------|------------------------------------------------|---------|\n| JVM                                                          | 1.8            |             | \u0026check;                                        |         |\n| JDK - Thread Pool                                            | 1.8            |             | \u0026check;                                        | \u0026check; |\n| JDK - HTTP Client                                            | 1.8            |             | [\u0026check;](doc/metrics/http-outgoing/README.md) | \u0026check; |\n| Apache Druid(1)                                              | 0.16           | 31.0        |                                                | \u0026check; |\n| Apache Kafka(2)                                              | 0.10.0.0       | 4.0         | \u0026check;                                        | \u0026check; |\n| Apache OZone                                                 | 1.3.0          |             |                                                | \u0026check; |\n| Apache ZooKeeper Client                                      | 3.5            | 3.9         | \u0026check;                                        |         |\n| Eclipse Glassfish                                            | 2.34           |             |                                                | \u0026check; |\n| GRPC                                                         | 1.57.0         |             | \u0026check;                                        | \u0026check; |\n| Google Guice                                                 | 4.1.0          |             |                                                | \u0026check; |\n| HTTP Client - Apache                                         | 4.5.2          | 5.x         | [\u0026check;](doc/metrics/http-outgoing/README.md) | \u0026check; |\n| HTTP Client - Jetty                                          | 9.4.6          |             | [\u0026check;](doc/metrics/http-outgoing/README.md) | \u0026check; |\n| HTTP Client - Netty                                          | 3.10.6         | \u003c 4.0       | [\u0026check;](doc/metrics/http-outgoing/README.md) | \u0026check; |\n| HTTP Client - okhttp3                                        | 3.2            | 4.9         | [\u0026check;](doc/metrics/http-outgoing/README.md) | \u0026check; |\n| HTTP Client - reactor-netty(3)                               | 0.9.10.RELEASE |             | [\u0026check;](doc/metrics/http-outgoing/README.md) | \u0026check; |\n| HTTP Client - JDK HttpURLConnection                          | 1.8            |             | [\u0026check;](doc/metrics/http-outgoing/README.md) | \u0026check; |\n| HTTP Client - JDK 11+ HttpClient (java.net.http.HttpClient)  | 11             |             | [\u0026check;](doc/metrics/http-outgoing/README.md) | \u0026check; |\n| Jersey                                                       | 1.19.4         |             |                                                | \u0026check; |\n| JDBC - Alibaba Druid                                         | 1.0.28         |             | \u0026check;                                        | \u0026check; |\n| JDBC - Apache Derby                                          | 10.14.2        |             | \u0026check;                                        | \u0026check; |\n| JDBC - ClickHouse                                            | 0.3.1          |             | \u0026check;                                        | \u0026check; |\n| JDBC - H2                                                    | 2.2.224        |             | \u0026check;                                        | \u0026check; |\n| JDBC - MySQL                                                 | 5.x            | 8.x         | \u0026check;                                        | \u0026check; |\n| JDBC - PostgreSQL                                            | 42.4.3         |             | \u0026check;                                        | \u0026check; |\n| MongoDB                                                      | 3.4.2          |             | \u0026check;                                        |         |\n| Open Feign                                                   | 10.8           |             |                                                | \u0026check; |\n| Quartz                                                       | 2.x            |             | \u0026check;                                        | \u0026check; |\n| Redis - Jedis                                                | 2.9            | 5.x         | \u0026check;                                        | \u0026check; |\n| Redis - Lettuce(4)                                           | 5.1.2          | 6.x         | \u0026check;                                        | \u0026check; |\n| Redis - Redisson                                             | 3.19.0         |             | \u0026check;                                        | \u0026check; |\n| Spring Boot                                                  | 1.5            | 3.0+        |                                                | \u0026check; |\n| [Spring Bean](doc/configuration/agent/plugin/spring-bean.md) | 4.3.12         |             |                                                | \u0026check; |\n| Spring Open Feign                                            | 10.8           |             |                                                | \u0026check; |\n| Spring Rest Template                                         | 4.3.12         |             |                                                | \u0026check; |\n| Spring Scheduling                                            | 4.3.12         |             |                                                | \u0026check; |\n| Spring Gateway                                               | 3.0.0          |             | [\u0026check;](doc/metrics/http-outgoing/README.md) | \u0026check; | \n| HTTP Server - Jetty                                          | 9.4.41         | 12.0.x      | \u0026check;                                        | \u0026check; |\n| HTTP Server - Netty                                          | 2.0.0          |             |                                                | \u0026check; |\n| HTTP Server - Tomcat                                         | 8.5.20         |             | \u0026check;                                        | \u0026check; |\n| HTTP Server - Undertow                                       | 1.4.12         |             | \u0026check;                                        | \u0026check; |\n| xxl-job                                                      | 2.3.0          |             |                                                | \u0026check; |\n\n## Restrictions\n1. For Apache Druid, the Jersey plugin is required to be enabled to collect query information.\n2. From Apache Kafka clients 3.7, the consumer metrics only works when the `group.protocol` is configured as `classic` which is the default configuration of the consumer client.\n3. For reactor-netty HTTP client, it supports the version 0.9 in io.projectreactor.netty:reactor-netty as well as 1.0.0 above in io.projectreactor.netty:reactor-netty-http \n4. For Lettuce, the tracing support is only available when it's used with Spring Data Redis API(org.springframework.data:spring-data-redis) from 2.3.4-RELEASE .\n\n\n\n\n# User Doc\n1. [Metrics](doc/metrics/README.md)\n2. [Tracing](doc/tracing/README.md)\n3. [Logging](doc/logging/README.md)\n4. [Diagnosis](doc/diagnosis/README.md)\n5. [Configuration](doc/configuration/configuration.md)\n6. SDK\n   1. [Metrics](doc/sdk/metrics.md)\n   2. [Tracing](doc/sdk/tracing.md)\n\n# Contribution\n\nTo develop for this project, intellij is recommended.\n\nA code style template file(`dev/bithon_intellij_code_style`) must be imported into intellij for coding.\n\nFor more information, check the [development doc](doc/dev/development.md).\n\n# License\n\n[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrankchen021%2Fbithon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrankchen021%2Fbithon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrankchen021%2Fbithon/lists"}