Sign inSign up

ollieparsley/twitter-api-metrics

By ollieparsley

•Updated about 5 years ago

Monitor your Twitter API usage using app auth and outputting to prometheus

Image
0

1.2K

ollieparsley/twitter-api-metrics repository overview

⁠Twitter API Metrics

Monitor your Twitter API usage using app auth and outputting to prometheus. This is done by calling the Twitter API on a regular interval and updating the prometheus metrics. The Twitter API endpoint application/rate_limit_status. A metric key is created for following:

  • Rate limit for each Twitter API endpoint for your app
  • Remaining requests for each Twitter API endpoint for your app

⁠Usage

⁠Docker

We have a Docker image for you to use on docker hub. By default you'll need to expose port 9100. Metric would then be available at /metrics

ollieparsley/twitter-api-metrics
⁠Environment variables

To allow you to customise the service we have a number of environment variables you can use so that you don't need to edit the code yourself:

NameDefaultDescription
TWITTER_API_METRICS_HTTP_HOST9100The HTTP port that you will need to expose if running in docker
TWITTER_API_METRICS_HTTP_PATH/metricsThe HTTP endpoint to to expose prometheus metrics on
TWITTER_API_METRICS_API_KEYRequiredThe Twitter app API Key (sometimes called consumer key)
TWITTER_API_METRICS_API_SECRET_KEYRequiredThe Twitter app API Secret Key (sometimes called consumer secret)
TWITTER_API_METRICS_INTERVAL_SECONDS10The interval used to refresh the twitter api rate limit metrics
TWITTER_API_METRICS_METRICS_PREFIXtwitter_api_ratelimitsThe prefix for the prometheus metrics names
TWITTER_API_METRICS_NAMEdefaultA name to put into prometheus metric keys to help identify, if using multiple instances

⁠Prometheus output

This is an example of the output you get from the service

# HELP twitter_api_ratelimits_counter Increment each time we call the API to get rate limits
# TYPE twitter_api_ratelimits_counter counter
twitter_api_ratelimits_counter{type=""} 2
# HELP twitter_api_ratelimits_limit The request limit for the endpoint rate limit
# TYPE twitter_api_ratelimits_limit gauge
twitter_api_ratelimits_limit{endpoint="/application/rate_limit_status",resource="application"} 180
twitter_api_ratelimits_limit{endpoint="/favorites/list",resource="favorites"} 75
twitter_api_ratelimits_limit{endpoint="/followers/ids",resource="followers"} 15
twitter_api_ratelimits_limit{endpoint="/followers/list",resource="followers"} 30
twitter_api_ratelimits_limit{endpoint="/friends/following/ids",resource="friends"} 15
twitter_api_ratelimits_limit{endpoint="/friends/following/list",resource="friends"} 15
twitter_api_ratelimits_limit{endpoint="/friends/ids",resource="friends"} 15
twitter_api_ratelimits_limit{endpoint="/friends/list",resource="friends"} 30
twitter_api_ratelimits_limit{endpoint="/friendships/list",resource="friendships"} 15
twitter_api_ratelimits_limit{endpoint="/friendships/show",resource="friendships"} 15
twitter_api_ratelimits_limit{endpoint="/help/configuration",resource="help"} 15
twitter_api_ratelimits_limit{endpoint="/help/languages",resource="help"} 15
twitter_api_ratelimits_limit{endpoint="/help/privacy",resource="help"} 15
twitter_api_ratelimits_limit{endpoint="/help/settings",resource="help"} 15
twitter_api_ratelimits_limit{endpoint="/help/tos",resource="help"} 15
twitter_api_ratelimits_limit{endpoint="/lists/list",resource="lists"} 15
twitter_api_ratelimits_limit{endpoint="/lists/members",resource="lists"} 75
twitter_api_ratelimits_limit{endpoint="/lists/members/show",resource="lists"} 15
twitter_api_ratelimits_limit{endpoint="/lists/memberships",resource="lists"} 75
twitter_api_ratelimits_limit{endpoint="/lists/ownerships",resource="lists"} 15
twitter_api_ratelimits_limit{endpoint="/lists/show",resource="lists"} 75
twitter_api_ratelimits_limit{endpoint="/lists/statuses",resource="lists"} 900
twitter_api_ratelimits_limit{endpoint="/lists/subscribers",resource="lists"} 15
twitter_api_ratelimits_limit{endpoint="/lists/subscribers/show",resource="lists"} 15
twitter_api_ratelimits_limit{endpoint="/lists/subscriptions",resource="lists"} 15
twitter_api_ratelimits_limit{endpoint="/search/tweets",resource="search"} 450
twitter_api_ratelimits_limit{endpoint="/statuses/lookup",resource="statuses"} 300
twitter_api_ratelimits_limit{endpoint="/statuses/oembed",resource="statuses"} 180
twitter_api_ratelimits_limit{endpoint="/statuses/retweeters/ids",resource="statuses"} 300
twitter_api_ratelimits_limit{endpoint="/statuses/retweets/:id",resource="statuses"} 300
twitter_api_ratelimits_limit{endpoint="/statuses/show/:id",resource="statuses"} 900
twitter_api_ratelimits_limit{endpoint="/statuses/user_timeline",resource="statuses"} 1500
twitter_api_ratelimits_limit{endpoint="/trends/available",resource="trends"} 75
twitter_api_ratelimits_limit{endpoint="/trends/closest",resource="trends"} 75
twitter_api_ratelimits_limit{endpoint="/trends/place",resource="trends"} 75
twitter_api_ratelimits_limit{endpoint="/users/lookup",resource="users"} 300
twitter_api_ratelimits_limit{endpoint="/users/profile_banner",resource="users"} 180
twitter_api_ratelimits_limit{endpoint="/users/reverse_lookup",resource="users"} 15
twitter_api_ratelimits_limit{endpoint="/users/show/:id",resource="users"} 900
twitter_api_ratelimits_limit{endpoint="/users/suggestions",resource="users"} 15
twitter_api_ratelimits_limit{endpoint="/users/suggestions/:slug",resource="users"} 15
twitter_api_ratelimits_limit{endpoint="/users/suggestions/:slug/members",resource="users"} 15
# HELP twitter_api_ratelimits_remaining The current number of requests made in the period for the endpoint rate limit
# TYPE twitter_api_ratelimits_remaining gauge
twitter_api_ratelimits_remaining{endpoint="/application/rate_limit_status",resource="application"} 114
twitter_api_ratelimits_remaining{endpoint="/favorites/list",resource="favorites"} 75
twitter_api_ratelimits_remaining{endpoint="/followers/ids",resource="followers"} 15
twitter_api_ratelimits_remaining{endpoint="/followers/list",resource="followers"} 30
twitter_api_ratelimits_remaining{endpoint="/friends/following/ids",resource="friends"} 15
twitter_api_ratelimits_remaining{endpoint="/friends/following/list",resource="friends"} 15
twitter_api_ratelimits_remaining{endpoint="/friends/ids",resource="friends"} 15
twitter_api_ratelimits_remaining{endpoint="/friends/list",resource="friends"} 30
twitter_api_ratelimits_remaining{endpoint="/friendships/list",resource="friendships"} 15
twitter_api_ratelimits_remaining{endpoint="/friendships/show",resource="friendships"} 15
twitter_api_ratelimits_remaining{endpoint="/help/configuration",resource="help"} 15
twitter_api_ratelimits_remaining{endpoint="/help/languages",resource="help"} 15
twitter_api_ratelimits_remaining{endpoint="/help/privacy",resource="help"} 15
twitter_api_ratelimits_remaining{endpoint="/help/settings",resource="help"} 15
twitter_api_ratelimits_remaining{endpoint="/help/tos",resource="help"} 15
twitter_api_ratelimits_remaining{endpoint="/lists/list",resource="lists"} 15
twitter_api_ratelimits_remaining{endpoint="/lists/members",resource="lists"} 75
twitter_api_ratelimits_remaining{endpoint="/lists/members/show",resource="lists"} 15
twitter_api_ratelimits_remaining{endpoint="/lists/memberships",resource="lists"} 75
twitter_api_ratelimits_remaining{endpoint="/lists/ownerships",resource="lists"} 15
twitter_api_ratelimits_remaining{endpoint="/lists/show",resource="lists"} 75
twitter_api_ratelimits_remaining{endpoint="/lists/statuses",resource="lists"} 900
twitter_api_ratelimits_remaining{endpoint="/lists/subscribers",resource="lists"} 15
twitter_api_ratelimits_remaining{endpoint="/lists/subscribers/show",resource="lists"} 15
twitter_api_ratelimits_remaining{endpoint="/lists/subscriptions",resource="lists"} 15
twitter_api_ratelimits_remaining{endpoint="/search/tweets",resource="search"} 450
twitter_api_ratelimits_remaining{endpoint="/statuses/lookup",resource="statuses"} 300
twitter_api_ratelimits_remaining{endpoint="/statuses/oembed",resource="statuses"} 180
twitter_api_ratelimits_remaining{endpoint="/statuses/retweeters/ids",resource="statuses"} 300
twitter_api_ratelimits_remaining{endpoint="/statuses/retweets/:id",resource="statuses"} 300
twitter_api_ratelimits_remaining{endpoint="/statuses/show/:id",resource="statuses"} 900
twitter_api_ratelimits_remaining{endpoint="/statuses/user_timeline",resource="statuses"} 1500
twitter_api_ratelimits_remaining{endpoint="/trends/available",resource="trends"} 75
twitter_api_ratelimits_remaining{endpoint="/trends/closest",resource="trends"} 75
twitter_api_ratelimits_remaining{endpoint="/trends/place",resource="trends"} 75
twitter_api_ratelimits_remaining{endpoint="/users/lookup",resource="users"} 300
twitter_api_ratelimits_remaining{endpoint="/users/profile_banner",resource="users"} 180
twitter_api_ratelimits_remaining{endpoint="/users/reverse_lookup",resource="users"} 15
twitter_api_ratelimits_remaining{endpoint="/users/show/:id",resource="users"} 900
twitter_api_ratelimits_remaining{endpoint="/users/suggestions",resource="users"} 15
twitter_api_ratelimits_remaining{endpoint="/users/suggestions/:slug",resource="users"} 15
twitter_api_ratelimits_remaining{endpoint="/users/suggestions/:slug/members",resource="users"} 15

⁠Known Issues

Current we only support Twitter app auth, not user auth. Please add an issue if you require user auth

⁠Contributions

To contribute please submit a PR and ensure you run make qa before submitting

Tag summary

Content type

Image

Digest

Size

11.9 MB

Last updated

about 5 years ago

docker pull ollieparsley/twitter-api-metrics