Awesome
Prometheus AWS ElastiCache Service Discovery
ElastiCache SD allows retrieving scrape targets from AWS ElastiCache cache nodes for Prometheus. No address is defined by default, it must be configured with relabeling and requires a third-party exporter supporting the multi-target pattern.
Configuration
Help on flags:
./prometheus-elasticache-sd --help
The following meta labels are available on targets during relabeling:
__meta_elasticache_cache_cluster_id
: The identifier of the cluster.__meta_elasticache_cache_cluster_status
: The current state of this cluster. SeeCacheClusterStatus
in the API Reference for possible values.__meta_elasticache_cache_node_id
: The cache node identifier. A node ID is a numeric identifier (0001, 0002, etc.). The combination of cluster ID and node ID uniquely identifies every cache node used in a customer's Amazon account.__meta_elasticache_cache_node_status
: The current state of this cache node. SeeCacheNodeStatus
in the API Reference for possible values.__meta_elasticache_cache_node_type
: The name of the compute and memory capacity node type for the cluster.__meta_elasticache_cache_parameter_group_name
: The name of the cache parameter group.__meta_elasticache_cache_subnet_group_name
: The name of the cache subnet group associated with the cluster.__meta_elasticache_customer_availability_zone
: The Availability Zone where this node was created and now resides.__meta_elasticache_endpoint_address
: The DNS hostname of the cache node.__meta_elasticache_endpoint_port
: The port number that the cache engine is listening on.__meta_elasticache_engine_version
: The version of the cache engine that is used in this cluster.__meta_elasticache_engine
: The name of the cache engine (memcached
orredis
) used for this cluster.__meta_elasticache_preferred_availability_zone
: The name of the Availability Zone in which the cluster is located or "Multiple" if the cache nodes are located in different Availability Zones.__meta_elasticache_replication_group_id
: The replication group to which this cluster belongs. If this label is absent, the cluster is not associated with any replication group.__meta_elasticache_tag_<tagkey>
: The tag's value.
The following AWS IAM permissions are required:
elasticache:DescribeCacheClusters
elasticache:ListTagsForResource
Usage
Docker
To run the ElastiCache SD as a Docker container, run:
docker run ghcr.io/maxbrunet/prometheus-elasticache-sd:latest --help
oliver006/redis_exporter
This service discovery can be used with oliver006/redis_exporter, here is a sample Prometheus configuration:
scrape_configs:
- job_name: "redis_exporter_targets"
file_sd_configs:
- files:
- /path/to/elasticache.json # Set file path with --output.file flag
metrics_path: /scrape
relabel_configs:
# Filter for Redis cache nodes
- source_labels: [__meta_elasticache_engine]
regex: redis
action: keep
# Build Redis URL to use as target parameter for the exporter
- source_labels:
- __meta_elasticache_endpoint_address
- __meta_elasticache_endpoint_port
replacement: redis://$1
separator: ':'
target_label: __param_target
# Use Redis URL as instance label
- source_labels: [__param_target]
target_label: instance
# Set exporter address
- target_label: __address__
replacement: <<REDIS-EXPORTER-HOSTNAME>>:9121
prometheus/memcached_exporter
This service discovery can be used with the official memcached_exporter, see its README for details.
Development
Build
Binary:
go build .
Container image with ko:
ko build --base-import-paths --local .
Test
go test -v ./...
License
Apache License 2.0, see LICENSE.