Monitor your Twitter API usage using app auth and outputting to prometheus
1.2K
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:
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
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:
| Name | Default | Description |
|---|---|---|
TWITTER_API_METRICS_HTTP_HOST | 9100 | The HTTP port that you will need to expose if running in docker |
TWITTER_API_METRICS_HTTP_PATH | /metrics | The HTTP endpoint to to expose prometheus metrics on |
TWITTER_API_METRICS_API_KEY | Required | The Twitter app API Key (sometimes called consumer key) |
TWITTER_API_METRICS_API_SECRET_KEY | Required | The Twitter app API Secret Key (sometimes called consumer secret) |
TWITTER_API_METRICS_INTERVAL_SECONDS | 10 | The interval used to refresh the twitter api rate limit metrics |
TWITTER_API_METRICS_METRICS_PREFIX | twitter_api_ratelimits | The prefix for the prometheus metrics names |
TWITTER_API_METRICS_NAME | default | A name to put into prometheus metric keys to help identify, if using multiple instances |
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
Current we only support Twitter app auth, not user auth. Please add an issue if you require user auth
To contribute please submit a PR and ensure you run make qa before submitting
Content type
Image
Digest
Size
11.9 MB
Last updated
about 5 years ago
docker pull ollieparsley/twitter-api-metrics