redis

package
v1.33.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 9, 2024 License: MIT Imports: 16 Imported by: 191

README

Redis Input Plugin

The Redis input plugin gathers metrics from one or many Redis servers.

Global configuration options

In addition to the plugin-specific configuration settings, plugins support additional global and plugin configuration settings. These settings are used to modify metrics, tags, and field or create aliases and configure ordering, etc. See the CONFIGURATION.md for more details.

Configuration

# Read metrics from one or many redis servers
[[inputs.redis]]
  ## specify servers via a url matching:
  ##  [protocol://][username:password]@address[:port]
  ##  e.g.
  ##    tcp://localhost:6379
  ##    tcp://username:password@192.168.99.100
  ##    unix:///var/run/redis.sock
  ##
  ## If no servers are specified, then localhost is used as the host.
  ## If no port is specified, 6379 is used
  servers = ["tcp://localhost:6379"]

  ## Optional. Specify redis commands to retrieve values
  # [[inputs.redis.commands]]
  #   # The command to run where each argument is a separate element
  #   command = ["get", "sample-key"]
  #   # The field to store the result in
  #   field = "sample-key-value"
  #   # The type of the result
  #   # Can be "string", "integer", or "float"
  #   type = "string"

  ## Specify username and password for ACL auth (Redis 6.0+). You can add this
  ## to the server URI above or specify it here. The values here take
  ## precedence.
  # username = ""
  # password = ""

  ## Optional TLS Config
  ## Check tls/config.go ClientConfig for more options
  # tls_enable = true
  # tls_ca = "/etc/telegraf/ca.pem"
  # tls_cert = "/etc/telegraf/cert.pem"
  # tls_key = "/etc/telegraf/key.pem"
  ## Use TLS but skip chain & host verification
  # insecure_skip_verify = true

Metrics

The plugin gathers the results of the INFO redis command. There are two separate measurements: redis and redis_keyspace, the latter is used for gathering database related statistics.

Additionally the plugin also calculates the hit/miss ratio (keyspace_hitrate) and the elapsed time since the last rdb save (rdb_last_save_time_elapsed).

  • redis

    • keyspace_hitrate(float, number)

    • rdb_last_save_time_elapsed(int, seconds)

      Server

    • uptime(int, seconds)

    • lru_clock(int, number)

    • redis_version(string)

      Clients

    • clients(int, number)

    • client_longest_output_list(int, number)

    • client_biggest_input_buf(int, number)

    • blocked_clients(int, number)

      Memory

    • used_memory(int, bytes)

    • used_memory_rss(int, bytes)

    • used_memory_peak(int, bytes)

    • total_system_memory(int, bytes)

    • used_memory_lua(int, bytes)

    • maxmemory(int, bytes)

    • maxmemory_policy(string)

    • mem_fragmentation_ratio(float, number)

      Persistence

    • loading(int,flag)

    • rdb_changes_since_last_save(int, number)

    • rdb_bgsave_in_progress(int, flag)

    • rdb_last_save_time(int, seconds)

    • rdb_last_bgsave_status(string)

    • rdb_last_bgsave_time_sec(int, seconds)

    • rdb_current_bgsave_time_sec(int, seconds)

    • aof_enabled(int, flag)

    • aof_rewrite_in_progress(int, flag)

    • aof_rewrite_scheduled(int, flag)

    • aof_last_rewrite_time_sec(int, seconds)

    • aof_current_rewrite_time_sec(int, seconds)

    • aof_last_bgrewrite_status(string)

    • aof_last_write_status(string)

      Stats

    • total_connections_received(int, number)

    • total_commands_processed(int, number)

    • instantaneous_ops_per_sec(int, number)

    • total_net_input_bytes(int, bytes)

    • total_net_output_bytes(int, bytes)

    • instantaneous_input_kbps(float, KB/sec)

    • instantaneous_output_kbps(float, KB/sec)

    • rejected_connections(int, number)

    • sync_full(int, number)

    • sync_partial_ok(int, number)

    • sync_partial_err(int, number)

    • expired_keys(int, number)

    • evicted_keys(int, number)

    • keyspace_hits(int, number)

    • keyspace_misses(int, number)

    • pubsub_channels(int, number)

    • pubsub_patterns(int, number)

    • latest_fork_usec(int, microseconds)

    • migrate_cached_sockets(int, number)

      Replication

    • connected_slaves(int, number)

    • master_link_down_since_seconds(int, number)

    • master_link_status(string)

    • master_repl_offset(int, number)

    • second_repl_offset(int, number)

    • repl_backlog_active(int, number)

    • repl_backlog_size(int, bytes)

    • repl_backlog_first_byte_offset(int, number)

    • repl_backlog_histlen(int, bytes)

      CPU

    • used_cpu_sys(float, number)

    • used_cpu_user(float, number)

    • used_cpu_sys_children(float, number)

    • used_cpu_user_children(float, number)

      Cluster

    • cluster_enabled(int, flag)

  • redis_keyspace

    • keys(int, number)
    • expires(int, number)
    • avg_ttl(int, number)
  • redis_cmdstat Every Redis used command could have the following fields:

    • calls(int, number)
    • failed_calls(int, number)
    • rejected_calls(int, number)
    • usec(int, mircoseconds)
    • usec_per_call(float, microseconds)
  • redis_latency_percentiles_usec

    • fields:
      • p50(float, microseconds)
      • p99(float, microseconds)
      • p99.9(float, microseconds)
  • redis_replication

    • tags:

      • replication_role
      • replica_ip
      • replica_port
      • state (either "online", "wait_bgsave", or "send_bulk")
    • fields:

      • lag(int, number)
      • offset(int, number)
  • redis_errorstat

    • tags:
      • err
    • fields:
      • total (int, number)
Tags
  • All measurements have the following tags:

    • port
    • server
    • replication_role
  • The redis_keyspace measurement has an additional database tag:

    • database
  • The redis_cmdstat measurement has an additional command tag:

    • command
  • The redis_latency_percentiles_usec measurement has an additional command tag:

    • command

Example Output

Using this configuration:

[[inputs.redis]]
  ## specify servers via a url matching:
  ##  [protocol://][:password]@address[:port]
  ##  e.g.
  ##    tcp://localhost:6379
  ##    tcp://:password@192.168.99.100
  ##
  ## If no servers are specified, then localhost is used as the host.
  ## If no port is specified, 6379 is used
  servers = ["tcp://localhost:6379"]

When run with:

./telegraf --config telegraf.conf --input-filter redis --test

It produces:

redis,server=localhost,port=6379,replication_role=master,host=host keyspace_hitrate=1,clients=2i,blocked_clients=0i,instantaneous_input_kbps=0,sync_full=0i,pubsub_channels=0i,pubsub_patterns=0i,total_net_output_bytes=6659253i,used_memory=842448i,total_system_memory=8351916032i,aof_current_rewrite_time_sec=-1i,rdb_changes_since_last_save=0i,sync_partial_err=0i,latest_fork_usec=508i,instantaneous_output_kbps=0,expired_keys=0i,used_memory_peak=843416i,aof_rewrite_in_progress=0i,aof_last_bgrewrite_status="ok",migrate_cached_sockets=0i,connected_slaves=0i,maxmemory_policy="noeviction",aof_rewrite_scheduled=0i,total_net_input_bytes=3125i,used_memory_rss=9564160i,repl_backlog_histlen=0i,rdb_last_bgsave_status="ok",aof_last_rewrite_time_sec=-1i,keyspace_misses=0i,client_biggest_input_buf=5i,used_cpu_user=1.33,maxmemory=0i,rdb_current_bgsave_time_sec=-1i,total_commands_processed=271i,repl_backlog_size=1048576i,used_cpu_sys=3,uptime=2822i,lru_clock=16706281i,used_memory_lua=37888i,rejected_connections=0i,sync_partial_ok=0i,evicted_keys=0i,rdb_last_save_time_elapsed=1922i,rdb_last_save_time=1493099368i,instantaneous_ops_per_sec=0i,used_cpu_user_children=0,client_longest_output_list=0i,master_repl_offset=0i,repl_backlog_active=0i,keyspace_hits=2i,used_cpu_sys_children=0,cluster_enabled=0i,rdb_last_bgsave_time_sec=0i,aof_last_write_status="ok",total_connections_received=263i,aof_enabled=0i,repl_backlog_first_byte_offset=0i,mem_fragmentation_ratio=11.35,loading=0i,rdb_bgsave_in_progress=0i 1493101290000000000

redis_keyspace:

redis_keyspace,database=db1,host=host,server=localhost,port=6379,replication_role=master keys=1i,expires=0i,avg_ttl=0i 1493101350000000000

redis_command:

redis_cmdstat,command=publish,host=host,port=6379,replication_role=master,server=localhost calls=569514i,failed_calls=0i,rejected_calls=0i,usec=9916334i,usec_per_call=17.41 1559227136000000000

redis_latency_percentiles_usec:

redis_latency_percentiles_usec,command=zadd,host=host,port=6379,replication_role=master,server=localhost p50=9.023,p99=28.031,p99.9=43.007 1559227136000000000

redis_error:

redis_errorstat,err=MOVED,host=host,port=6379,replication_role=master,server=localhost total=4284 1691119309000000000

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Tracking = map[string]string{
	"uptime_in_seconds": "uptime",
	"connected_clients": "clients",
	"role":              "replication_role",
}

Functions

This section is empty.

Types

type Client added in v1.14.0

type Client interface {
	Do(returnType string, args ...interface{}) (interface{}, error)
	Info() *redis.StringCmd
	BaseTags() map[string]string
	Close() error
}

type Redis

type Redis struct {
	Commands []*RedisCommand `toml:"commands"`
	Servers  []string        `toml:"servers"`
	Username string          `toml:"username"`
	Password string          `toml:"password"`

	tls.ClientConfig

	Log telegraf.Logger `toml:"-"`
	// contains filtered or unexported fields
}

func (*Redis) Gather

func (r *Redis) Gather(acc telegraf.Accumulator) error

Reads stats from all configured servers accumulates stats. Returns one of the errors encountered while gather stats (if any).

func (*Redis) Init added in v1.19.3

func (r *Redis) Init() error

func (*Redis) SampleConfig

func (*Redis) SampleConfig() string

func (*Redis) Start added in v1.23.0

func (r *Redis) Start(telegraf.Accumulator) error

func (*Redis) Stop added in v1.23.0

func (r *Redis) Stop()

Stop close the client through ServiceInput interface Start/Stop methods impl.

type RedisClient added in v1.14.0

type RedisClient struct {
	// contains filtered or unexported fields
}

func (*RedisClient) BaseTags added in v1.14.0

func (r *RedisClient) BaseTags() map[string]string

func (*RedisClient) Close added in v1.23.0

func (r *RedisClient) Close() error

func (*RedisClient) Do added in v1.16.0

func (r *RedisClient) Do(returnType string, args ...interface{}) (interface{}, error)

func (*RedisClient) Info added in v1.14.0

func (r *RedisClient) Info() *redis.StringCmd

type RedisCommand added in v1.16.0

type RedisCommand struct {
	Command []interface{} `toml:"command"`
	Field   string        `toml:"field"`
	Type    string        `toml:"type"`
}

type RedisFieldTypes added in v1.18.0

type RedisFieldTypes struct {
	ActiveDefragHits            int64   `json:"active_defrag_hits"`
	ActiveDefragKeyHits         int64   `json:"active_defrag_key_hits"`
	ActiveDefragKeyMisses       int64   `json:"active_defrag_key_misses"`
	ActiveDefragMisses          int64   `json:"active_defrag_misses"`
	ActiveDefragRunning         int64   `json:"active_defrag_running"`
	AllocatorActive             int64   `json:"allocator_active"`
	AllocatorAllocated          int64   `json:"allocator_allocated"`
	AllocatorFragBytes          float64 `json:"allocator_frag_bytes"` // for historical reasons this was left as float although redis reports it as an int
	AllocatorFragRatio          float64 `json:"allocator_frag_ratio"`
	AllocatorResident           int64   `json:"allocator_resident"`
	AllocatorRssBytes           int64   `json:"allocator_rss_bytes"`
	AllocatorRssRatio           float64 `json:"allocator_rss_ratio"`
	AofCurrentRewriteTimeSec    int64   `json:"aof_current_rewrite_time_sec"`
	AofEnabled                  int64   `json:"aof_enabled"`
	AofLastBgrewriteStatus      string  `json:"aof_last_bgrewrite_status"`
	AofLastCowSize              int64   `json:"aof_last_cow_size"`
	AofLastRewriteTimeSec       int64   `json:"aof_last_rewrite_time_sec"`
	AofLastWriteStatus          string  `json:"aof_last_write_status"`
	AofRewriteInProgress        int64   `json:"aof_rewrite_in_progress"`
	AofRewriteScheduled         int64   `json:"aof_rewrite_scheduled"`
	BlockedClients              int64   `json:"blocked_clients"`
	ClientRecentMaxInputBuffer  int64   `json:"client_recent_max_input_buffer"`
	ClientRecentMaxOutputBuffer int64   `json:"client_recent_max_output_buffer"`
	Clients                     int64   `json:"clients"`
	ClientsInTimeoutTable       int64   `json:"clients_in_timeout_table"`
	ClusterEnabled              int64   `json:"cluster_enabled"`
	ConnectedSlaves             int64   `json:"connected_slaves"`
	EvictedKeys                 int64   `json:"evicted_keys"`
	ExpireCycleCPUMilliseconds  int64   `json:"expire_cycle_cpu_milliseconds"`
	ExpiredKeys                 int64   `json:"expired_keys"`
	ExpiredStalePerc            float64 `json:"expired_stale_perc"`
	ExpiredTimeCapReachedCount  int64   `json:"expired_time_cap_reached_count"`
	InstantaneousInputKbps      float64 `json:"instantaneous_input_kbps"`
	InstantaneousOpsPerSec      int64   `json:"instantaneous_ops_per_sec"`
	InstantaneousOutputKbps     float64 `json:"instantaneous_output_kbps"`
	IoThreadedReadsProcessed    int64   `json:"io_threaded_reads_processed"`
	IoThreadedWritesProcessed   int64   `json:"io_threaded_writes_processed"`
	KeyspaceHits                int64   `json:"keyspace_hits"`
	KeyspaceMisses              int64   `json:"keyspace_misses"`
	LatestForkUsec              int64   `json:"latest_fork_usec"`
	LazyfreePendingObjects      int64   `json:"lazyfree_pending_objects"`
	Loading                     int64   `json:"loading"`
	LruClock                    int64   `json:"lru_clock"`
	MasterReplOffset            int64   `json:"master_repl_offset"`
	MaxMemory                   int64   `json:"maxmemory"`
	MaxMemoryPolicy             string  `json:"maxmemory_policy"`
	MemAofBuffer                int64   `json:"mem_aof_buffer"`
	MemClientsNormal            int64   `json:"mem_clients_normal"`
	MemClientsSlaves            int64   `json:"mem_clients_slaves"`
	MemFragmentationBytes       int64   `json:"mem_fragmentation_bytes"`
	MemFragmentationRatio       float64 `json:"mem_fragmentation_ratio"`
	MemNotCountedForEvict       int64   `json:"mem_not_counted_for_evict"`
	MemReplicationBacklog       int64   `json:"mem_replication_backlog"`
	MigrateCachedSockets        int64   `json:"migrate_cached_sockets"`
	ModuleForkInProgress        int64   `json:"module_fork_in_progress"`
	ModuleForkLastCowSize       int64   `json:"module_fork_last_cow_size"`
	NumberOfCachedScripts       int64   `json:"number_of_cached_scripts"`
	PubsubChannels              int64   `json:"pubsub_channels"`
	PubsubPatterns              int64   `json:"pubsub_patterns"`
	RdbBgsaveInProgress         int64   `json:"rdb_bgsave_in_progress"`
	RdbChangesSinceLastSave     int64   `json:"rdb_changes_since_last_save"`
	RdbCurrentBgsaveTimeSec     int64   `json:"rdb_current_bgsave_time_sec"`
	RdbLastBgsaveStatus         string  `json:"rdb_last_bgsave_status"`
	RdbLastBgsaveTimeSec        int64   `json:"rdb_last_bgsave_time_sec"`
	RdbLastCowSize              int64   `json:"rdb_last_cow_size"`
	RdbLastSaveTime             int64   `json:"rdb_last_save_time"`
	RdbLastSaveTimeElapsed      int64   `json:"rdb_last_save_time_elapsed"`
	RedisVersion                string  `json:"redis_version"`
	RejectedConnections         int64   `json:"rejected_connections"`
	ReplBacklogActive           int64   `json:"repl_backlog_active"`
	ReplBacklogFirstByteOffset  int64   `json:"repl_backlog_first_byte_offset"`
	ReplBacklogHistlen          int64   `json:"repl_backlog_histlen"`
	ReplBacklogSize             int64   `json:"repl_backlog_size"`
	RssOverheadBytes            int64   `json:"rss_overhead_bytes"`
	RssOverheadRatio            float64 `json:"rss_overhead_ratio"`
	SecondReplOffset            int64   `json:"second_repl_offset"`
	SlaveExpiresTrackedKeys     int64   `json:"slave_expires_tracked_keys"`
	SyncFull                    int64   `json:"sync_full"`
	SyncPartialErr              int64   `json:"sync_partial_err"`
	SyncPartialOk               int64   `json:"sync_partial_ok"`
	TotalCommandsProcessed      int64   `json:"total_commands_processed"`
	TotalConnectionsReceived    int64   `json:"total_connections_received"`
	TotalNetInputBytes          int64   `json:"total_net_input_bytes"`
	TotalNetOutputBytes         int64   `json:"total_net_output_bytes"`
	TotalReadsProcessed         int64   `json:"total_reads_processed"`
	TotalSystemMemory           int64   `json:"total_system_memory"`
	TotalWritesProcessed        int64   `json:"total_writes_processed"`
	TrackingClients             int64   `json:"tracking_clients"`
	TrackingTotalItems          int64   `json:"tracking_total_items"`
	TrackingTotalKeys           int64   `json:"tracking_total_keys"`
	TrackingTotalPrefixes       int64   `json:"tracking_total_prefixes"`
	UnexpectedErrorReplies      int64   `json:"unexpected_error_replies"`
	Uptime                      int64   `json:"uptime"`
	UsedCPUSys                  float64 `json:"used_cpu_sys"`
	UsedCPUSysChildren          float64 `json:"used_cpu_sys_children"`
	UsedCPUUser                 float64 `json:"used_cpu_user"`
	UsedCPUUserChildren         float64 `json:"used_cpu_user_children"`
	UsedMemory                  int64   `json:"used_memory"`
	UsedMemoryDataset           int64   `json:"used_memory_dataset"`
	UsedMemoryDatasetPerc       float64 `json:"used_memory_dataset_perc"`
	UsedMemoryLua               int64   `json:"used_memory_lua"`
	UsedMemoryOverhead          int64   `json:"used_memory_overhead"`
	UsedMemoryPeak              int64   `json:"used_memory_peak"`
	UsedMemoryPeakPerc          float64 `json:"used_memory_peak_perc"`
	UsedMemoryRss               int64   `json:"used_memory_rss"`
	UsedMemoryScripts           int64   `json:"used_memory_scripts"`
	UsedMemoryStartup           int64   `json:"used_memory_startup"`
}

RedisFieldTypes defines the types expected for each of the fields redis reports on

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL