Coder Social home page Coder Social logo

hyperdxio / hyperdx Goto Github PK

View Code? Open in Web Editor NEW
6.1K 19.0 163.0 12.18 MB

Resolve production issues, fast. An open source observability platform unifying session replays, logs, metrics, traces and errors powered by Clickhouse and OpenTelemetry.

Home Page: https://hyperdx.io/

License: MIT License

Shell 0.27% Dockerfile 0.90% JavaScript 0.29% TypeScript 95.45% SCSS 1.90% CSS 0.14% Python 0.30% Makefile 0.32% Go 0.44%
analytics application-monitoring log-management logs metrics monitoring observability opentelemetry traces apm

hyperdx's People

Contributors

adl5423 avatar colehpage avatar dependabot[bot] avatar eltociear avatar ernestii avatar jaggederest avatar jeyrathnam avatar joelseq avatar mark-omarov avatar mikeshi42 avatar rtpa25 avatar stayweek avatar svc-shorpo avatar treypisano avatar wrn14897 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hyperdx's Issues

[HDX-43] Custom ingestion API domain or proxy docs

An issue with the browser JS package is that it ships everything to https://in-otel.hyperdx.io which is already on a lot of blocklists, ensuring that most useful events are dropped.
This means both lost insights for users of HyperDX Cloud, but also less revenue because of less data ingestion.
Of course, this is only relevant for HyperDX Cloud, not the self-hosted one which is already hosted on a owned domain.

So this is one of two things:

  1. A feature request for custom domain names for the HyperDX Cloud ingestion API (where HyperDX hosts the proxy with SSL termination)
  2. A docs request for how to most effectively set this up ourselves without messing with the data that the ingestion expects (does it look at origin/host? does it handle forwarded headers?)

HDX-43

Show user clicks as events in session replay

We've gotten feedback that being able to see the user's clicks as an explicit event in the sidebar of our replay would be helpful to follow along in the session.

This is quite similar to other products such as Fullstory where user interactions are shown as a discrete event. We currently have user interaction information via otel (NPM package) and we technically have them in the replay data as well, but preferably we can pull it via spans (our existing events are derived from spans, and we anticipate changing how the replay data is loaded in the future which can complicate this issue)

[HDX-410] Support Otel gRPC

Hi,

to evaluate what types of metrics I can send to hyperdx I realized that I am lacking performance monitoring of my setup. Basically a simple cpu and mem usage, but also more complex cases like container resource usages.
While researching I found various solutions that can send telemetry data (e.g. Telegraf ) to otel endpoints.

However, I noticed multiple times that those implementers decided to go with otel via gRPC and as far as I know, hyperdex only consumes otel via http. This is not an issue for custom instrumentations I write for my software, but may introduce friction when using third party integrations, that does not support otel over http.

So I would propose to consider adding gRPC support to hyperdx

HDX-410

Add/emphasize cursor in session replay

We've received a few reports that being able to see the cursor during the replay would help massively to understand what the user is doing.

Cursors are supported in rrweb (the replay library we use) natively, but we need to look if we either just need to enable a flag, or if there are some other issues with us not displaying the cursor (capture bugs, CSS bugs, etc.)

The relevant code for rrweb is here:

replayer.current = new Replayer(initialEvents.current, {

Example report: https://discord.com/channels/1149498480893640706/1149498481912840225/1154502591900827718

Duration column in search shows negative number if only timestamp present

From the demo, if you turn on the Duration column, and an event has a timestamp but not duration (and presumably not an end time, either), it seems to be subtracting the timestamp from 0 and inventing a negative duration.

(Separately, Duration might be a useful column to show by default in the demo - showing that this isn't just a log aggregator, but something designed to understand entire request-response cycles!)

https://www.hyperdx.io/search?from=1695145472000&to=1695146372000&tq=Sep+19+13%3A44%3A32+-+Sep+19+13%3A59%3A32&lid=e6a41903-0505-407e-848b-26a21081b833&sk=1695146367784000000

Screenshot 2023-09-19 at 2 03 44 PM

/bin/sh: 1: poetry: not found

=> [miner builder-base 4/6] COPY ./packages/miner/poetry.lock ./packages/miner/pyproject.toml ./ 0.1s
=> ERROR [miner builder-base 5/6] RUN poetry install --no-dev # respects 0.6s

**> [miner builder-base 5/6] RUN poetry install --no-dev # respects:
0.530 /bin/sh: 1: poetry: not found

failed to solve: process "/bin/sh -c poetry install --no-dev # respects" did not complete successfully: exit code: 127
D:\Lib\Docker\hyperdx-hyperdx-1.1.1>**

D:\Lib\Docker\hyperdx-hyperdx-1.1.1\packages\miner\Dockerfile line 28

ENV POETRY_VERSION=1.5.1 replaced to:

RUN pip install poetry
ENV POETRY_HOME="/opt/poetry"
#POETRY_VIRTUALENVS_CREATE=false
#POETRY_VIRTUALENVS_IN_PROJECT=false
#POETRY_NO_INTERACTION=1
POETRY_VERSION=1.5.1
ENV PATH="$PATH:$POETRY_HOME/bin"

[HYP-37] First-party support for local dev-mode observability

Often times even locally you need access to traces, metrics, logs, or at least have the ability to preview the telemetry you may be implementing without pushing to prod.

We already do this with our own HyperDX workflow, and it seems like it's been brought up a few times in our HN launch as well for being useful for other people's workflows.

We should figure out what requirements should be part of making HyperDX local-friendly, a few things on the top of my mind:

  1. Optimize for resource footprint over scalability (we can tune the memory usage of the otel collector, maybe remove the miner or spin it up on-demand, etc)
  2. Auth-less flow, so users can just spin up a container and start sending telemetry to the Otel ports directly without any additional auth/key/team setup.

Kicking off this issue to collect any other requirements and stub out additional tickets along the way.

HYP-37

hdx-oss-otel-collector exposing port TCP 0.0.0.0:1888 -> 0.0.0.0:0: listen tcp 0.0.0.0:1888: bind: forbidden

:\Lib\Docker\hyperdx-hyperdx-1.1.1>docker compose up -d
time="2023-10-05T12:58:08+08:00" level=warning msg="The "HYPERDX_API_KEY" variable is not set. Defaulting to a blank string."
time="2023-10-05T12:58:08+08:00" level=warning msg="The "HYPERDX_API_KEY" variable is not set. Defaulting to a blank string."
time="2023-10-05T12:58:08+08:00" level=warning msg="The "HYPERDX_API_KEY" variable is not set. Defaulting to a blank string."
time="2023-10-05T12:58:08+08:00" level=warning msg="The "HYPERDX_API_KEY" variable is not set. Defaulting to a blank string."
time="2023-10-05T12:58:08+08:00" level=warning msg="The "HYPERDX_API_KEY" variable is not set. Defaulting to a blank string."
[+] Building 0.0s (0/0) docker:default
[+] Running 10/11
✔ Container hdx-oss-redis Running 0.0s
✔ Container hdx-oss-miner Running 0.0s
✔ Container hdx-oss-hostmetrics Running 0.0s
✔ Container hdx-oss-ingestor Running 0.0s
✔ Container hdx-oss-db Running 0.0s
✔ Container hdx-oss-ch-server Running 0.0s
✔ Container hdx-oss-aggregator Started 0.0s
✔ Container hdx-oss-task-check-alerts Started 0.0s
✔ Container hdx-oss-api Started 0.0s
✔ Container hdx-oss-app Created 0.0s

  • Container hdx-oss-otel-collector Starting 1.0s
    Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:1888 -> 0.0.0.0:0: listen tcp 0.0.0.0:1888: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

D:\Lib\Docker\hyperdx-hyperdx-1.1.1>

Persist search page column width

Current scenario:

  1. Navigate to /search
  2. Increase width of any of the available columns
  3. Navigate away from search to any of the other pages
  4. navigate back to /search and the column width would reset

Could maybe leverage local storage to store column width and persist that locally on the browser.

[HYP-40] Show Preset Dashboards Dynamically

Today preset dashboards will show up regardless if it's relevant for you or not, which can create a confusing user experience (why is it showing me a Redis dashboard if I don't have redis?)

We should figure out a way to tailor preset dashboards to only show up once we're somewhat confident that they will find it relevant (ex. the redis dashboard should only show up once redis spans are there).

From SyncLinear.com | HYP-40

Not able to override app env variables

image image

I was trying to setup in server using the docker compose and find out cant replace the localhost with my server hostname.
NEXT_PUBLIC_API_SERVER_URL & NEXT_PUBLIC_HDX_COLLECTOR_URL cant be overriden.
localhost2 is just an example hostname.

[HDX-44] Time Query Presets Should Fill Absolute Time Range

Today when you click "Past 12h" the time query will become "Past 12h", this is problematic if you revisit the page later and try to refresh the page, expecting it to load the newest 12h of data but instead it will keep the same old static view.

Instead, the presets should just "materialize" the relative query into the actually timestamps like we do with every other query.

From SyncLinear.com | HDX-45

Preset dashboard for website analytics

Since HyperDX has a browser integration and integrates with frameworks like NextJS, it would be awesome if there was a preset dashboard for website analytics with things like unique visitors, pages visited, top referrers and such. Right now I'm using Vercel's analytics product for my SvelteKit side project but I'd like to be able to just use HyperDX for all of this. Also, Vercel's analytics product requires creating a "Pro" team in order to add Custom Events which feels like it could easily be replaced by Custom Actions in HyperDX's browser integration.

Here's a screenshot of my Vercel analytics dashboard:
image

Custom tracePropagationTargetsSelf not working in self hosted version.

I am trying to get the trace logs on my self hosted version of Hyperdx.
But, even after changing the tracePropagationTargetsSelf to my custom open-telemetry URL (mapped to 4318 port on the server) is not working in any way. The default log collector request are going on

image

Here is the code that I am using the plane javascript.
image

Due to lack of documentation for Self Hosted version, I am not able to get it working.
Any idea what I am doing wrong here?

Can't scroll horizontally in the trace view

For long traces it's impossible to see later spans!

Ideally it'd be possible to select regions of the trace, like you can do in chrome devtool's network inspector (drag on the overview, zoom in/out).

[HDX-142] Support non numeric values for histogram

I am test-driving hyperdx and IMHO the best thing on observability tools is to slice and dice data into several segments to understand and inspect things.

I realized that I have many events being sent from various nodes. The data looks something like:

{
  "Duration": 345,
  "Node": "A"
}

Another would be

{
  "Duration": 25555,
  "Node": "B"
}

I now want to see a histogram binned by Node Name and their durations.
While I can create a histogram about Duration and filter to Node:"B", I would rather be able to create the following histogram:
"Show me the (pick one: average|min|max) duration for Service X, grouped by 'Node'".

I assumed this would be a very common use case. But I might be wrong 😅

As far as I can see, HyperDX does not support it right now. If so, then this is a feature request, otherwise this is a request to help me to find the docs for it 😊

Edit: The line chart actually has an ok-ish visualization for that (if there is more than one data point), but maybe a histogram feature set similar to the line chart would be useful?

HDX-142

[HYP-21] PHP Support

Suggestion: Add support for PHP.

The OpenTelemetry PHP package is more complete than Python's or Go's, the community is larger than Python's or Go's (though Python has more mindshare), and the number of competitors that support PHP tracing is tiny (erm, that lack of mindshare hurts).

If you are looking to tap into a latent but powerful market with relative ease - add support for tracing PHP!

HYP-21

Customize font and colors

Some users have a preference for different fonts (monospace vs sans serif) and colors as well. We should allow users to customize their display - likely similar to an editor.

Example feedback from HN: https://news.ycombinator.com/item?id=37562134

Implementation details are likely to be similar to #29

Opening this to feedback as well in terms of what kinds of font/color/customizations people would be looking for :)

Customize 24h vs 12h time formatting globally

Some users have a preference for 12h time instead of 24h time, today we do a mix of both depending on the UI they're looking at (sessions is primarily 12h, logs are primarily 24h) - we should allow users to globally toggle 12/24h time and update the time format across the app accordingly.

I've already started a bit of the implementation, but there is still a lot of way to go:

Todo:

  • Update all time formats around the app in UI components to accept timeFormat as a property
  • Update page components to inject timeFormat as a property to UI components (or shortcut this and just read from the provider directly)
  • Add UI for user preferences in the settings page somewhere.
  • Persist user preferences in localstorage

Remix support

Strongly considering HyperDX, but unfortunately it doesn't have first-class support for Remix yet.

Kubernetes deployment?

I would like to try and evaluate the OSS version on a pre-prod k8s cluster, is there a helm chart or sort of guide/instruction? Setting up entire app via docker-compose is not really helpful in that environment, as it there are lots of moving parts involved.

Release Sentry Integration (BETA)

Today HyperDX ingests Sentry telemetry. Before releasing the feature, we should:

  1. Refine the exception log detail view UI
  2. Document Sentry integration process

Generic Webhook Option for Alerts

Since most of our alert channels today depend on an Oauth-based flow in Cloud, we don't have many alert options available in the OSS version. Additionally even in the cloud, you're limited by the current set of alert integrations we've written today.

We should allow users to configure arbitrary webhook destinations with custom payloads so that they can alert via webhook to other platforms like Pagerduty, Twilio, Sendgrid, etc.

style(ui): improve text representation for null or N/A values

The original improvement idea:

  1. It'd be awesome if the value is N/A, that we assign the class as text-muted so it's less distracting in the UI.
  2. I think null might work better than N/A in the UI, since it is technically null (though I know in the DB it isn't actually nullable, due to performance reasons)

Originally posted by @MikeShi42 in #28 (review)

Indeed, it'd be great to emphasize such values visually.
I'm not really sure if the values should be null. My concern is that such a value would look like something went wrong in the code, and I could see myself reporting a bug titled "null value in the duration column of the log table" if I didn't know this was intentional. I guess it depends on how we look at it.
What do you think?

feat(app): enhanced registration form validation

We expect passwords to adhere to a ruleset during registration, but we don't give the user enough information.

When registering with a weak password, we receive the "Email or password is invalid". We could add form validation to give the user a better experience by rendering the ruleset for the password when it doesn't match the minimum requirements.

We already use react-hook-form on the client and zod on the server. We could either use those on the client to validate before submission or improve error messaging after the submission. I would try to leverage zod instead of isemail and potentially remove the latter, and the same goes for the password validation instead of the custom validatePassword.

I'd be willing to implement this feature.

Screenshot 2023-09-25 at 9 29 31

[HDX-104] Reset ChartSeriesForm state properly when switching states

Currently the ChartSeriesForm will not always set the form to be in a sensible state when you're switching data sources (logs vs metrics) or metric names (metric X vs metric Y)

If you're switching metric fields, the group by labels (and probably the where?) should be reset as well, otherwise the chart will be empty without any clear reason. (ex. Label X existed on Metric A, but not in Metric B, so you get 0 results in the chart).

There might be other edge cases we're missing as well.

From SyncLinear.com | HDX-104

Logging and Tracing in WildFly server

Followed the instructions and added -javaagent:/opt/app/opentelemetry-javaagent.jar

Added environment variables as export statemetns in standalone.sh which starts wilffly server (this is how I have used many other APM like Glowroot etc).

Even after 10 / 15 mintues traces and logs are not showing up on HyperDX cloud .. am I missing something?

# HyperDX integration
export OTEL_EXPORTER_OTLP_ENDPOINT="https://in-otel.hyperdx.io"
export OTEL_EXPORTER_OTLP_HEADERS="authorization=api-key"
export OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"
export OTEL_LOGS_EXPORTER="otlp"
export OTEL_SERVICE_NAME="DEV-Server"

I also tried adding as system properties by changing to otel.exporter.otlp.endpoint etc. That also does not help. Also strange is that I dont see any logs from the otel javaagent also.

The java command shows the -javaagent:/opt/app/opentelemetry-javaagent.jar as a part of it.

[HDX-253] Persist Custom Columns

When a user adds a custom column to a search and saves the search, we should also persist the custom columns they've added as well. This would involve adding the custom column as a property to the saved search in the DB.

Related to: #27

From SyncLinear.com | HDX-253

hdx-oss-dev-miner - /docker-entrypoint.sh: not found w/ solution

While downloading the project, I encountered an issue when executing the command "docker compose -f ./docker-compose.dev.yml up -d". hdx-oss-dev-miner threw the error: "/docker-entrypoint.sh: not found". This problem arose because the docker-entrypoint.sh file had the wrong line ending format, specifically, it was in CRLF format.

I managed to resolve this issue by converting the line ending format of the docker-entrypoint.sh file to LF.

Currently in the repository, the file is in the LF format. However, Git has a feature that automatically switches LF files to CRLF. The problem is also fixed when cloning the repository with the Git configuration setting core.autocrlf set to false. https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreautocrlf

For context, I'm running Docker version 4.24.1 on Windows with WSL2. Note that this issue only occurs when using the dev YAML, not when using "docker compose up -d".

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.