Giter VIP home page Giter VIP logo

housewatch's Introduction

๐Ÿ“ˆ Open source tool for monitoring and managing ClickHouse clusters

  • Get an overview of cluster load and performance
  • Drill down into your queries and understand the load they put on your cluster
  • Search through logs and errors
  • Monitor and kill running queries with the click of a button
  • Get stats on your disk usage per node, and understand how much disk space tables, columns, and parts take up
  • Run your own queries straight from the interface to further dig into performance and cluster issues
  • Setup operations to run in the background with automatic rollbacks for failures

๐Ÿ’ป Deploy

To deploy HouseWatch, clone this repo and then run the following, substituting the environment variables for the relevant values of one of your ClickHouse instances:

SITE_ADDRESS=<SITE_ADDRESS> \
CLICKHOUSE_HOST=localhost \
CLICKHOUSE_CLUSTER=mycluster \
CLICKHOUSE_USER=default \
CLICKHOUSE_PASSWORD=xxxxxxxxxxx \
docker compose -f docker-compose.yml up

SITE_ADDRESS here is the address that the UI will be running on. It can be a domain name or simply a port like :80.

After running the above, the UI will be running on the address you specified. This will be something like http://localhost if you used :80 for your SITE_ADDRESS above. I would think twice about exposing this to the internet, as it is not currently secured in any way.

Read more

The following are the supported environment variables for configuring your HouseWatch deployment:

  • CLICKHOUSE_HOST: Required - hostname of the instance to connect to.
  • CLICKHOUSE_USER: Required - username to access ClickHouse. Can be a read-only user, but in that case not all features will work.
  • CLICKHOUSE_PASSWORD: Required - password for the specified user.
  • CLICKHOUSE_DATABASE: Optional - database to connect to by default.
  • CLICKHOUSE_CLUSTER: Optional - cluster name, to analyze data from the whole cluster.
  • CLICKHOUSE_SECURE: Optional - see clickhouse-driver docs for more information
  • CLICKHOUSE_VERIFY: Optional - see clickhouse-driver docs for more information
  • CLICKHOUSE_CA: Optional - see clickhouse-driver docs for more information
  • OPENAI_API_KEY: Optional - enables the experimental "AI Tools" page, which currently features a natural language query editor
  • OPENAI_MODEL: Optional - a valid OpenAI model (e.g. gpt-3.5-turbo, gpt-4) that you have access to with the key above to be used for the AI features

๐Ÿ’ก Motivation

At PostHog we manage a few large ClickHouse clusters and found ourselves in need of a tool to monitor and manage these more easily.

ClickHouse is fantastic at introspection, providing a lot of metadata about the system in its system tables so that it can be easily queried. However, knowing exactly how to query and parse the available information can be a difficult task. Over the years at PostHog, we've developed great intuition for how to debug ClickHouse issues using ClickHouse, and HouseWatch is the compilation of this knowledge into a tool.

Beyond monitoring, we also built internal systems and processes for managing the clusters that spanned various platforms. We would use Grafana to look at metrics, SSH into nodes for running operations and using specialized tooling, query via Metabase to dig deeper into the data in the system tables and create dashboards, and then a combination of tools baked into the PostHog product for further debugging and streamlined operations such as our async migrations tool, and internal views for listing queries and analyzing their performance.

As a result, we felt it was appropriate to have these tools live in one place. Ultimately, our vision for HouseWatch is that it can both serve the purpose of a pganalyze for the ClickHouse ecosystem, while also including tooling for taking action on insights derived from the analysis.

๐Ÿ—๏ธ Status of the project

HouseWatch is in its early days and we have a lot more features in mind that we'd like to build into it going forward. The code could also use some cleaning up :) As of right now, it is considered Beta software and you should exercise caution when using it in production.

One potential approach is to connect HouseWatch to ClickHouse using a read-only user. In this case, the cluster management features will not work (e.g. operations, query editor), but the analysis toolset will function normally.

HouseWatch was created and is maintained by PostHog and yakkomajuri.

โ„น๏ธ Contributing

Contributions are certainly welcome! However, if you'd like to build a new feature, please open up an issue first.

โญ Features

Query performance


Schema stats


Query benchmarking


Logs


Query editor


Disk usage


Errors


Operations

๐Ÿ—’๏ธ To-do list

A public list of things we intend to do with HouseWatch in the near future.

See list

Features

  • System issues tab
  • EXPLAIN visualizer
  • Multiple instance support
  • Stats on page cache hit percentage
  • Make operations resilient to Celery going down (as we do in PostHog with async migrations)
  • Read-only mode
  • Button to force refresh running queries list
  • Logs pagination
  • Allow copying example queries
  • Configurable time ranges
  • Whole cluster schema stats
  • More operation controls: view, delete, edit, re-run, display errors

Developer experience

  • Configure instance from UI
  • Publish a Docker image
  • Development docker-compose.yml with baked in ClickHouse

Cleanup

  • Extract README images out of repo
  • Make banner subtitle work on dark mode
  • Fetch data independently on the query analyzer
  • Breakpoint for logs search
  • Run Django "production server"
  • Write tests :)
  • Query editor pipe all errors to client
  • Abstraction to load data from API as JSON

housewatch's People

Contributors

eltociear avatar frankh avatar fuziontech avatar liyiy avatar sindhubb avatar timgl avatar yakkomajuri avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.