Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add micrometer support #594

Open
wants to merge 24 commits into
base: develop
Choose a base branch
from
Open

Conversation

PhilippHeuer
Copy link
Member

@PhilippHeuer PhilippHeuer commented Jun 28, 2022

Prerequisites for Code Changes

  • This pull request follows the code style of the project
  • I have tested this feature

Description

micrometer is a facade for metric collection, the goal is to provide metrics from all t4j components in a agnostic / easy way to improve observability.

Changes Proposed

  • use the feign-bom instead
  • metrics for all http clients (feign-micrometer for http request / response metrics)
  • metrics for client-websocket
  • metrics for chat
  • pubsub
  • pool metrics (connection count, ...)

Out-of-Scope

  • apollo (graphql)

Additional Information

Can use the following when testing locally to print collected metrics every 10s:
MeterRegistry meterRegistry = new CompositeMeterRegistry(Clock.SYSTEM, Collections.singletonList(new LogMetricsRegistry()));

Chat

meterRegistry.gauge("twitch4j_chat_latency",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId)), latency);
meterRegistry.gauge("twitch4j_chat_channel_count",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId)), getChannels().size());
meterRegistry.gauge("twitch4j_chat_bucket",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId), Tag.of("bucket", "irc_message")), ircMessageBucket.getAvailableTokens());
meterRegistry.gauge("twitch4j_chat_bucket",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId), Tag.of("bucket", "whisper_message")), ircWhisperBucket.getAvailableTokens());
meterRegistry.gauge("twitch4j_chat_bucket",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId), Tag.of("bucket", "auth")), ircAuthBucket.getAvailableTokens());
meterRegistry.gauge("twitch4j_chat_bucket",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId), Tag.of("bucket", "join")), ircJoinBucket.getAvailableTokens());
meterRegistry.gauge("twitch4j_chat_message_queue_count",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId)), ircCommandQueue.size());

PubSub

meterRegistry.gauge("twitch4j_pubsub_latency",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId)), latency);
meterRegistry.gauge("twitch4j_pubsub_topic_count",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId)), subscribedTopics.size());
meterRegistry.gauge("twitch4j_pubsub_queue_count",  Arrays.asList(Tag.of("connection_name", connectionName), Tag.of("connection_id", connectionId)), commandQueue.size());

Connection Pools

meterRegistry.gauge("twitch4j_chat_pool_connection_count", Collections.singletonList(Tag.of("connection_name", connectionName)), numConnections());
meterRegistry.gauge("twitch4j_chat_pool_subscription_count", Collections.singletonList(Tag.of("connection_name", connectionName)), numSubscriptions());

@PhilippHeuer PhilippHeuer marked this pull request as ready for review February 28, 2023 20:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants