Skip to content

Commit

Permalink
Merge pull request #1063 from ruflin/redis-metricbeat-enhancements
Browse files Browse the repository at this point in the history
Add full metricset and docs for redis
  • Loading branch information
tsg committed Mar 3, 2016
2 parents 2070900 + 823c9a8 commit 5f75d2d
Show file tree
Hide file tree
Showing 4 changed files with 211 additions and 11 deletions.
4 changes: 2 additions & 2 deletions metricbeat/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ beat:
command: make
entrypoint: /go/src/github.com/elastic/beats/metricbeat/docker-entrypoint.sh
elasticsearch:
image: elasticsearch:2.1.0
image: elasticsearch:2.2.0
command: elasticsearch -Des.network.host=0.0.0.0

# Modules
Expand All @@ -33,4 +33,4 @@ mysql:
- MYSQL_ROOT_PASSWORD=test

redis:
image: redis:3.0.6
image: redis:3.0.7
93 changes: 89 additions & 4 deletions metricbeat/module/redis/info/data.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,96 @@ import (
// Map data to MapStr
func eventMapping(info map[string]string) common.MapStr {

// Full mapping from info
event := common.MapStr{
"version": info["redis_version"],
"mode": info["redis_mode"],
"os": info["os"],
"process_id": info["process_id"],
"clients": common.MapStr{
"connected_clients": info["connected_clients"],
"client_longest_output_list": info["client_longest_output_list"],
"client_biggest_input_buf": info["client_biggest_input_buf"],
"blocked_clients": info["blocked_clients"],
},
"cluster": common.MapStr{
"cluster_enabled": info["cluster_enabled"],
},
"cpu": common.MapStr{
"used_cpu_sys": info["used_cpu_sys"],
"used_cpu_user": info["used_cpu_user"],
"used_cpu_sys_children": info["used_cpu_sys_children"],
"used_cpu_user_children": info["used_cpu_user_children"],
},
"memory": common.MapStr{
"used_memory": info["used_memory"],
"used_memory_rss": info["used_memory_rss"],
"used_memory_peak": info["used_memory_peak"],
"used_memory_lua": info["used_memory_lua"],
"mem_allocator": info["mem_allocator"], // Could be moved server as it rarely changes
},
"presistence": common.MapStr{
"loading": info["loading"],
"rdb_changes_since_last_save": info["rdb_changes_since_last_save"],
"rdb_bgsave_in_progress": info["rdb_bgsave_in_progress"],
"rdb_last_save_time": info["rdb_last_save_time"],
"rdb_last_bgsave_status": info["rdb_last_bgsave_status"],
"rdb_last_bgsave_time_sec": info["rdb_last_bgsave_time_sec"],
"rdb_current_bgsave_time_sec": info["rdb_current_bgsave_time_sec"],
"aof_enabled": info["aof_enabled"],
"aof_rewrite_in_progress": info["aof_rewrite_in_progress"],
"aof_rewrite_scheduled": info["aof_rewrite_scheduled"],
"aof_last_rewrite_time_sec": info["aof_last_rewrite_time_sec"],
"aof_current_rewrite_time_sec": info["aof_current_rewrite_time_sec"],
"aof_last_bgrewrite_status": info["aof_last_bgrewrite_status"],
"aof_last_write_status": info["aof_last_write_status"],
},
"replication": common.MapStr{
"role": info["role"],
"connected_slaves": info["connected_slaves"],
"master_repl_offset": info["master_repl_offset"],
"repl_backlog_active": info["repl_backlog_active"],
"repl_backlog_size": info["repl_backlog_size"],
"repl_backlog_first_byte_offset": info["repl_backlog_first_byte_offset"],
"repl_backlog_histlen": info["repl_backlog_histlen"],
},
"server": common.MapStr{
"redis_version": info["redis_version"],
"redis_git_sha1": info["redis_git_sha1"],
"redis_git_dirty": info["redis_git_dirty"],
"redis_build_id": info["redis_build_id"],
"redis_mode": info["redis_mode"],
"os": info["os"],
"arch_bits": info["arch_bits"],
"multiplexing_api": info["multiplexing_api"],
"gcc_version": info["gcc_version"],
"process_id": info["process_id"],
"run_id": info["run_id"],
"tcp_port": info["tcp_port"],
"uptime_in_seconds": info["uptime_in_seconds"],
"uptime_in_days": info["uptime_in_days"],
"hz": info["hz"],
"lru_clock": info["lru_clock"],
"config_file": info["config_file"],
},
"stats": common.MapStr{
"total_connections_received": info["total_connections_received"],
"total_commands_processed": info["total_commands_processed"],
"instantaneous_ops_per_sec": info["instantaneous_ops_per_sec"],
"total_net_input_bytes": info["total_net_input_bytes"],
"total_net_output_bytes": info["total_net_output_bytes"],
"instantaneous_input_kbps": info["instantaneous_input_kbps"],
"instantaneous_output_kbps": info["instantaneous_output_kbps"],
"rejected_connections": info["rejected_connections"],
"sync_full": info["sync_full"],
"sync_partial_ok": info["sync_partial_ok"],
"sync_partial_err": info["sync_partial_err"],
"expired_keys": info["expired_keys"],
"evicted_keys": info["evicted_keys"],
"keyspace_hits": info["keyspace_hits"],

"keyspace_misses": info["keyspace_misses"],
"pubsub_channels": info["pubsub_channels"],
"pubsub_patterns": info["pubsub_patterns"],
"latest_fork_usec": info["latest_fork_usec"],
"migrate_cached_sockets": info["migrate_cached_sockets"],
},
}

return event
Expand Down
112 changes: 111 additions & 1 deletion metricbeat/module/redis/info/info.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,114 @@
// Loads data from the redis info command
/**
This calls the info command in redis and retrieves the data.
The document sent to elasticsearch has the following structure:
{
"metricset": "info",
"module": "redis",
"redis-info": {
"clients": {
"blocked_clients": "0",
"client_biggest_input_buf": "0",
"client_longest_output_list": "0",
"connected_clients": "3"
},
"cluster": {
"cluster_enabled": "0"
},
"cpu": {
"used_cpu_sys": "210.63",
"used_cpu_sys_children": "0.00",
"used_cpu_user": "113.11",
"used_cpu_user_children": "0.00"
},
"memory": {
"mem_allocator": "libc",
"used_memory": "1043200",
"used_memory_lua": "36864",
"used_memory_peak": "1164080",
"used_memory_rss": "778240"
},
"presistence": {
"aof_current_rewrite_time_sec": "-1",
"aof_enabled": "0",
"aof_last_bgrewrite_status": "ok",
"aof_last_rewrite_time_sec": "-1",
"aof_last_write_status": "ok",
"aof_rewrite_in_progress": "0",
"aof_rewrite_scheduled": "0",
"loading": "0",
"rdb_bgsave_in_progress": "0",
"rdb_changes_since_last_save": "1",
"rdb_current_bgsave_time_sec": "-1",
"rdb_last_bgsave_status": "ok",
"rdb_last_bgsave_time_sec": "0",
"rdb_last_save_time": "1456758970"
},
"replication": {
"connected_slaves": "0",
"master_repl_offset": "0",
"repl_backlog_active": "0",
"repl_backlog_first_byte_offset": "0",
"repl_backlog_histlen": "0",
"repl_backlog_size": "1048576",
"role": "master"
},
"server": {
"arch_bits": "64",
"config_file": "",
"gcc_version": "4.2.1",
"hz": "10",
"lru_clock": "13918572",
"multiplexing_api": "kqueue",
"os": "Darwin 15.3.0 x86_64",
"process_id": "1158",
"redis_build_id": "aa27a151289c9b98",
"redis_git_dirty": "0",
"redis_git_sha1": "00000000",
"redis_mode": "standalone",
"redis_version": "3.0.7",
"run_id": "8e1659f076c248591812705a24e545257ee6e090",
"tcp_port": "6379",
"uptime_in_days": "20",
"uptime_in_seconds": "1730008"
},
"stats": {
"evicted_keys": "0",
"expired_keys": "0",
"instantaneous_input_kbps": "0.01",
"instantaneous_ops_per_sec": "0",
"instantaneous_output_kbps": "1.16",
"keyspace_hits": "1",
"keyspace_misses": "0",
"latest_fork_usec": "376",
"migrate_cached_sockets": "0",
"pubsub_channels": "0",
"pubsub_patterns": "0",
"rejected_connections": "0",
"sync_full": "0",
"sync_partial_err": "0",
"sync_partial_ok": "0",
"total_commands_processed": "151",
"total_connections_received": "146",
"total_net_input_bytes": "2247",
"total_net_output_bytes": "277354"
}
}
}
The current implementation is tested with redis 3.0.7
More details on all the fields provided by the redis info command can be found here: http://redis.io/commands/INFO
Currently not reported are Keyspaces coming in the following format:
# Keyspace
db0:keys=2,expires=0,avg_ttl=0
db3:keys=1,expires=0,avg_ttl=0
*/
package info

import (
Expand Down
13 changes: 9 additions & 4 deletions metricbeat/module/redis/info/info_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package info
import (
"testing"

"github.com/stretchr/testify/assert"

"github.com/elastic/beats/libbeat/common"
"github.com/elastic/beats/metricbeat/helper"
"github.com/elastic/beats/metricbeat/module/redis"
"github.com/stretchr/testify/assert"
)

func TestConnect(t *testing.T) {
Expand All @@ -29,7 +31,10 @@ func TestConnect(t *testing.T) {
assert.NoError(t, err)

// Check fields
assert.Equal(t, 4, len(data[0]))
assert.Equal(t, "3.0.6", data[0]["version"])
assert.Equal(t, "standalone", data[0]["mode"])
assert.Equal(t, 8, len(data[0]))

server := data[0]["server"].(common.MapStr)

assert.Equal(t, "3.0.7", server["redis_version"])
assert.Equal(t, "standalone", server["redis_mode"])
}

0 comments on commit 5f75d2d

Please sign in to comment.