Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
171
plugins/inputs/unbound/README.md
Normal file
171
plugins/inputs/unbound/README.md
Normal file
|
@ -0,0 +1,171 @@
|
|||
# Unbound Input Plugin
|
||||
|
||||
This plugin gathers stats from [Unbound](https://www.unbound.net/) -
|
||||
a validating, recursive, and caching DNS resolver.
|
||||
|
||||
## Global configuration options <!-- @/docs/includes/plugin_config.md -->
|
||||
|
||||
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][CONFIGURATION.md] for more details.
|
||||
|
||||
[CONFIGURATION.md]: ../../../docs/CONFIGURATION.md#plugins
|
||||
|
||||
## Configuration
|
||||
|
||||
```toml @sample.conf
|
||||
# A plugin to collect stats from the Unbound DNS resolver
|
||||
[[inputs.unbound]]
|
||||
## Address of server to connect to, read from unbound conf default, optionally ':port'
|
||||
## Will lookup IP if given a hostname
|
||||
server = "127.0.0.1:8953"
|
||||
|
||||
## If running as a restricted user you can prepend sudo for additional access:
|
||||
# use_sudo = false
|
||||
|
||||
## The default location of the unbound-control binary can be overridden with:
|
||||
# binary = "/usr/sbin/unbound-control"
|
||||
|
||||
## The default location of the unbound config file can be overridden with:
|
||||
# config_file = "/etc/unbound/unbound.conf"
|
||||
|
||||
## The default timeout of 1s can be overridden with:
|
||||
# timeout = "1s"
|
||||
|
||||
## When set to true, thread metrics are tagged with the thread id.
|
||||
##
|
||||
## The default is false for backwards compatibility, and will be changed to
|
||||
## true in a future version. It is recommended to set to true on new
|
||||
## deployments.
|
||||
thread_as_tag = false
|
||||
```
|
||||
|
||||
### Permissions
|
||||
|
||||
It's important to note that this plugin references unbound-control, which may
|
||||
require additional permissions to execute successfully. Depending on the
|
||||
user/group permissions of the telegraf user executing this plugin, you may need
|
||||
to alter the group membership, set facls, or use sudo.
|
||||
|
||||
**Group membership (Recommended)**:
|
||||
|
||||
```bash
|
||||
$ groups telegraf
|
||||
telegraf : telegraf
|
||||
|
||||
$ usermod -a -G unbound telegraf
|
||||
|
||||
$ groups telegraf
|
||||
telegraf : telegraf unbound
|
||||
```
|
||||
|
||||
**Sudo privileges**:
|
||||
If you use this method, you will need the following in your telegraf config:
|
||||
|
||||
```toml
|
||||
[[inputs.unbound]]
|
||||
use_sudo = true
|
||||
```
|
||||
|
||||
You will also need to update your sudoers file:
|
||||
|
||||
```bash
|
||||
$ visudo
|
||||
# Add the following line:
|
||||
Cmnd_Alias UNBOUNDCTL = /usr/sbin/unbound-control
|
||||
telegraf ALL=(ALL) NOPASSWD: UNBOUNDCTL
|
||||
Defaults!UNBOUNDCTL !logfile, !syslog, !pam_session
|
||||
```
|
||||
|
||||
Please use the solution you see as most appropriate.
|
||||
|
||||
## Metrics
|
||||
|
||||
This is the full list of stats provided by unbound-control and potentially
|
||||
collected depending of your unbound configuration. Histogram related statistics
|
||||
will never be collected, extended statistics can also be imported
|
||||
("extended-statistics: yes" in unbound configuration). In the output, the dots
|
||||
in the unbound-control stat name are replaced by underscores(see
|
||||
<https://www.unbound.net/documentation/unbound-control.html> for details).
|
||||
|
||||
Shown metrics are with `thread_as_tag` enabled.
|
||||
|
||||
- unbound
|
||||
- fields:
|
||||
total_num_queries
|
||||
total_num_cachehits
|
||||
total_num_cachemiss
|
||||
total_num_prefetch
|
||||
total_num_recursivereplies
|
||||
total_requestlist_avg
|
||||
total_requestlist_max
|
||||
total_requestlist_overwritten
|
||||
total_requestlist_exceeded
|
||||
total_requestlist_current_all
|
||||
total_requestlist_current_user
|
||||
total_recursion_time_avg
|
||||
total_recursion_time_median
|
||||
time_now
|
||||
time_up
|
||||
time_elapsed
|
||||
mem_total_sbrk
|
||||
mem_cache_rrset
|
||||
mem_cache_message
|
||||
mem_mod_iterator
|
||||
mem_mod_validator
|
||||
num_query_type_A
|
||||
num_query_type_PTR
|
||||
num_query_type_TXT
|
||||
num_query_type_AAAA
|
||||
num_query_type_SRV
|
||||
num_query_type_ANY
|
||||
num_query_class_IN
|
||||
num_query_opcode_QUERY
|
||||
num_query_tcp
|
||||
num_query_ipv6
|
||||
num_query_flags_QR
|
||||
num_query_flags_AA
|
||||
num_query_flags_TC
|
||||
num_query_flags_RD
|
||||
num_query_flags_RA
|
||||
num_query_flags_Z
|
||||
num_query_flags_AD
|
||||
num_query_flags_CD
|
||||
num_query_edns_present
|
||||
num_query_edns_DO
|
||||
num_answer_rcode_NOERROR
|
||||
num_answer_rcode_SERVFAIL
|
||||
num_answer_rcode_NXDOMAIN
|
||||
num_answer_rcode_nodata
|
||||
num_answer_secure
|
||||
num_answer_bogus
|
||||
num_rrset_bogus
|
||||
unwanted_queries
|
||||
unwanted_replies
|
||||
|
||||
- unbound_thread
|
||||
- tags:
|
||||
- thread
|
||||
- fields:
|
||||
- num_queries
|
||||
- num_cachehits
|
||||
- num_cachemiss
|
||||
- num_prefetch
|
||||
- num_recursivereplies
|
||||
- requestlist_avg
|
||||
- requestlist_max
|
||||
- requestlist_overwritten
|
||||
- requestlist_exceeded
|
||||
- requestlist_current_all
|
||||
- requestlist_current_user
|
||||
- recursion_time_avg
|
||||
- recursion_time_median
|
||||
|
||||
## Example Output
|
||||
|
||||
```text
|
||||
unbound,host=localhost total_requestlist_avg=0,total_requestlist_exceeded=0,total_requestlist_overwritten=0,total_requestlist_current_user=0,total_recursion_time_avg=0.029186,total_tcpusage=0,total_num_queries=51,total_num_queries_ip_ratelimited=0,total_num_recursivereplies=6,total_requestlist_max=0,time_now=1522804978.784814,time_elapsed=310.435217,total_num_cachemiss=6,total_num_zero_ttl=0,time_up=310.435217,total_num_cachehits=45,total_num_prefetch=0,total_requestlist_current_all=0,total_recursion_time_median=0.016384 1522804979000000000
|
||||
unbound_threads,host=localhost,thread=0 num_queries_ip_ratelimited=0,requestlist_current_user=0,recursion_time_avg=0.029186,num_prefetch=0,requestlist_overwritten=0,requestlist_exceeded=0,requestlist_current_all=0,tcpusage=0,num_cachehits=37,num_cachemiss=6,num_recursivereplies=6,requestlist_avg=0,num_queries=43,num_zero_ttl=0,requestlist_max=0,recursion_time_median=0.032768 1522804979000000000
|
||||
unbound_threads,host=localhost,thread=1 num_zero_ttl=0,recursion_time_avg=0,num_queries_ip_ratelimited=0,num_cachehits=8,num_prefetch=0,requestlist_exceeded=0,recursion_time_median=0,tcpusage=0,num_cachemiss=0,num_recursivereplies=0,requestlist_max=0,requestlist_overwritten=0,requestlist_current_user=0,num_queries=8,requestlist_avg=0,requestlist_current_all=0 1522804979000000000
|
||||
```
|
24
plugins/inputs/unbound/sample.conf
Normal file
24
plugins/inputs/unbound/sample.conf
Normal file
|
@ -0,0 +1,24 @@
|
|||
# A plugin to collect stats from the Unbound DNS resolver
|
||||
[[inputs.unbound]]
|
||||
## Address of server to connect to, read from unbound conf default, optionally ':port'
|
||||
## Will lookup IP if given a hostname
|
||||
server = "127.0.0.1:8953"
|
||||
|
||||
## If running as a restricted user you can prepend sudo for additional access:
|
||||
# use_sudo = false
|
||||
|
||||
## The default location of the unbound-control binary can be overridden with:
|
||||
# binary = "/usr/sbin/unbound-control"
|
||||
|
||||
## The default location of the unbound config file can be overridden with:
|
||||
# config_file = "/etc/unbound/unbound.conf"
|
||||
|
||||
## The default timeout of 1s can be overridden with:
|
||||
# timeout = "1s"
|
||||
|
||||
## When set to true, thread metrics are tagged with the thread id.
|
||||
##
|
||||
## The default is false for backwards compatibility, and will be changed to
|
||||
## true in a future version. It is recommended to set to true on new
|
||||
## deployments.
|
||||
thread_as_tag = false
|
189
plugins/inputs/unbound/unbound.go
Normal file
189
plugins/inputs/unbound/unbound.go
Normal file
|
@ -0,0 +1,189 @@
|
|||
//go:generate ../../../tools/readme_config_includer/generator
|
||||
package unbound
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"context"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"net"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/config"
|
||||
"github.com/influxdata/telegraf/filter"
|
||||
"github.com/influxdata/telegraf/internal"
|
||||
"github.com/influxdata/telegraf/plugins/inputs"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
var sampleConfig string
|
||||
|
||||
var (
|
||||
defaultBinary = "/usr/sbin/unbound-control"
|
||||
defaultTimeout = config.Duration(time.Second)
|
||||
)
|
||||
|
||||
type Unbound struct {
|
||||
Binary string `toml:"binary"`
|
||||
Timeout config.Duration `toml:"timeout"`
|
||||
UseSudo bool `toml:"use_sudo"`
|
||||
Server string `toml:"server"`
|
||||
ThreadAsTag bool `toml:"thread_as_tag"`
|
||||
ConfigFile string `toml:"config_file"`
|
||||
|
||||
run runner
|
||||
}
|
||||
|
||||
type runner func(unbound Unbound) (*bytes.Buffer, error)
|
||||
|
||||
func (*Unbound) SampleConfig() string {
|
||||
return sampleConfig
|
||||
}
|
||||
|
||||
func (s *Unbound) Gather(acc telegraf.Accumulator) error {
|
||||
// Always exclude histogram statistics
|
||||
statExcluded := []string{"histogram.*"}
|
||||
filterExcluded, err := filter.Compile(statExcluded)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
out, err := s.run(*s)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error gathering metrics: %w", err)
|
||||
}
|
||||
|
||||
// Process values
|
||||
fields := make(map[string]interface{})
|
||||
fieldsThreads := make(map[string]map[string]interface{})
|
||||
|
||||
scanner := bufio.NewScanner(out)
|
||||
for scanner.Scan() {
|
||||
cols := strings.Split(scanner.Text(), "=")
|
||||
|
||||
// Check split correctness
|
||||
if len(cols) != 2 {
|
||||
continue
|
||||
}
|
||||
|
||||
stat := cols[0]
|
||||
value := cols[1]
|
||||
|
||||
// Filter value
|
||||
if filterExcluded.Match(stat) {
|
||||
continue
|
||||
}
|
||||
|
||||
fieldValue, err := strconv.ParseFloat(value, 64)
|
||||
if err != nil {
|
||||
acc.AddError(fmt.Errorf("expected a numerical value for %s = %v", stat, value))
|
||||
continue
|
||||
}
|
||||
|
||||
// is this a thread related value?
|
||||
if s.ThreadAsTag && strings.HasPrefix(stat, "thread") {
|
||||
// split the stat
|
||||
statTokens := strings.Split(stat, ".")
|
||||
// make sure we split something
|
||||
if len(statTokens) > 1 {
|
||||
// set the thread identifier
|
||||
threadID := strings.TrimPrefix(statTokens[0], "thread")
|
||||
// make sure we have a proper thread ID
|
||||
if _, err = strconv.Atoi(threadID); err == nil {
|
||||
// create new slice without the thread identifier (skip first token)
|
||||
threadTokens := statTokens[1:]
|
||||
// re-define stat
|
||||
field := strings.Join(threadTokens[:], "_")
|
||||
if fieldsThreads[threadID] == nil {
|
||||
fieldsThreads[threadID] = make(map[string]interface{})
|
||||
}
|
||||
fieldsThreads[threadID][field] = fieldValue
|
||||
}
|
||||
}
|
||||
} else {
|
||||
field := strings.ReplaceAll(stat, ".", "_")
|
||||
fields[field] = fieldValue
|
||||
}
|
||||
}
|
||||
|
||||
acc.AddFields("unbound", fields, nil)
|
||||
|
||||
if s.ThreadAsTag && len(fieldsThreads) > 0 {
|
||||
for thisThreadID, thisThreadFields := range fieldsThreads {
|
||||
thisThreadTag := map[string]string{"thread": thisThreadID}
|
||||
acc.AddFields("unbound_threads", thisThreadFields, thisThreadTag)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Shell out to unbound_stat and return the output
|
||||
func unboundRunner(unbound Unbound) (*bytes.Buffer, error) {
|
||||
cmdArgs := []string{"stats_noreset"}
|
||||
|
||||
if unbound.Server != "" {
|
||||
host, port, err := net.SplitHostPort(unbound.Server)
|
||||
if err != nil { // No port was specified
|
||||
host = unbound.Server
|
||||
port = ""
|
||||
}
|
||||
|
||||
// Unbound control requires an IP address, and we want to be nice to the user
|
||||
resolver := net.Resolver{}
|
||||
ctx, lookUpCancel := context.WithTimeout(context.Background(), time.Duration(unbound.Timeout))
|
||||
defer lookUpCancel()
|
||||
serverIps, err := resolver.LookupIPAddr(ctx, host)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error looking up ip for server %q: %w", unbound.Server, err)
|
||||
}
|
||||
if len(serverIps) == 0 {
|
||||
return nil, fmt.Errorf("error no ip for server %q: %w", unbound.Server, err)
|
||||
}
|
||||
server := serverIps[0].IP.String()
|
||||
if port != "" {
|
||||
server = server + "@" + port
|
||||
}
|
||||
|
||||
cmdArgs = append([]string{"-s", server}, cmdArgs...)
|
||||
}
|
||||
|
||||
if unbound.ConfigFile != "" {
|
||||
cmdArgs = append([]string{"-c", unbound.ConfigFile}, cmdArgs...)
|
||||
}
|
||||
|
||||
cmd := exec.Command(unbound.Binary, cmdArgs...)
|
||||
|
||||
if unbound.UseSudo {
|
||||
cmdArgs = append([]string{unbound.Binary}, cmdArgs...)
|
||||
cmd = exec.Command("sudo", cmdArgs...)
|
||||
}
|
||||
|
||||
var out bytes.Buffer
|
||||
cmd.Stdout = &out
|
||||
err := internal.RunTimeout(cmd, time.Duration(unbound.Timeout))
|
||||
if err != nil {
|
||||
return &out, fmt.Errorf("error running unbound-control %q %q: %w", unbound.Binary, cmdArgs, err)
|
||||
}
|
||||
|
||||
return &out, nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
inputs.Add("unbound", func() telegraf.Input {
|
||||
return &Unbound{
|
||||
run: unboundRunner,
|
||||
Binary: defaultBinary,
|
||||
Timeout: defaultTimeout,
|
||||
UseSudo: false,
|
||||
Server: "",
|
||||
ThreadAsTag: false,
|
||||
ConfigFile: "",
|
||||
}
|
||||
})
|
||||
}
|
292
plugins/inputs/unbound/unbound_test.go
Normal file
292
plugins/inputs/unbound/unbound_test.go
Normal file
|
@ -0,0 +1,292 @@
|
|||
package unbound
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
)
|
||||
|
||||
func unboundControl(output string) func(Unbound) (*bytes.Buffer, error) {
|
||||
return func(Unbound) (*bytes.Buffer, error) {
|
||||
return bytes.NewBufferString(output), nil
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseFullOutput(t *testing.T) {
|
||||
acc := &testutil.Accumulator{}
|
||||
v := &Unbound{
|
||||
run: unboundControl(fullOutput),
|
||||
}
|
||||
err := v.Gather(acc)
|
||||
|
||||
require.NoError(t, err)
|
||||
|
||||
require.True(t, acc.HasMeasurement("unbound"))
|
||||
|
||||
require.Len(t, acc.Metrics, 1)
|
||||
require.Equal(t, 63, acc.NFields())
|
||||
|
||||
acc.AssertContainsFields(t, "unbound", parsedFullOutput)
|
||||
}
|
||||
|
||||
func TestParseFullOutputThreadAsTag(t *testing.T) {
|
||||
acc := &testutil.Accumulator{}
|
||||
v := &Unbound{
|
||||
run: unboundControl(fullOutput),
|
||||
ThreadAsTag: true,
|
||||
}
|
||||
err := v.Gather(acc)
|
||||
|
||||
require.NoError(t, err)
|
||||
|
||||
require.True(t, acc.HasMeasurement("unbound"))
|
||||
require.True(t, acc.HasMeasurement("unbound_threads"))
|
||||
|
||||
require.Len(t, acc.Metrics, 2)
|
||||
require.Equal(t, 63, acc.NFields())
|
||||
|
||||
acc.AssertContainsFields(t, "unbound", parsedFullOutputThreadAsTagMeasurementUnbound)
|
||||
acc.AssertContainsFields(t, "unbound_threads", parsedFullOutputThreadAsTagMeasurementUnboundThreads)
|
||||
}
|
||||
|
||||
var parsedFullOutput = map[string]interface{}{
|
||||
"thread0_num_queries": float64(11907596),
|
||||
"thread0_num_cachehits": float64(11489288),
|
||||
"thread0_num_cachemiss": float64(418308),
|
||||
"thread0_num_prefetch": float64(0),
|
||||
"thread0_num_recursivereplies": float64(418308),
|
||||
"thread0_requestlist_avg": float64(0.400229),
|
||||
"thread0_requestlist_max": float64(11),
|
||||
"thread0_requestlist_overwritten": float64(0),
|
||||
"thread0_requestlist_exceeded": float64(0),
|
||||
"thread0_requestlist_current_all": float64(0),
|
||||
"thread0_requestlist_current_user": float64(0),
|
||||
"thread0_recursion_time_avg": float64(0.015020),
|
||||
"thread0_recursion_time_median": float64(0.00292343),
|
||||
"total_num_queries": float64(11907596),
|
||||
"total_num_cachehits": float64(11489288),
|
||||
"total_num_cachemiss": float64(418308),
|
||||
"total_num_prefetch": float64(0),
|
||||
"total_num_recursivereplies": float64(418308),
|
||||
"total_requestlist_avg": float64(0.400229),
|
||||
"total_requestlist_max": float64(11),
|
||||
"total_requestlist_overwritten": float64(0),
|
||||
"total_requestlist_exceeded": float64(0),
|
||||
"total_requestlist_current_all": float64(0),
|
||||
"total_requestlist_current_user": float64(0),
|
||||
"total_recursion_time_avg": float64(0.015020),
|
||||
"total_recursion_time_median": float64(0.00292343),
|
||||
"time_now": float64(1509968734.735180),
|
||||
"time_up": float64(1472897.672099),
|
||||
"time_elapsed": float64(1472897.672099),
|
||||
"mem_total_sbrk": float64(7462912),
|
||||
"mem_cache_rrset": float64(285056),
|
||||
"mem_cache_message": float64(320000),
|
||||
"mem_mod_iterator": float64(16532),
|
||||
"mem_mod_validator": float64(112097),
|
||||
"num_query_type_A": float64(7062688),
|
||||
"num_query_type_PTR": float64(43097),
|
||||
"num_query_type_TXT": float64(2998),
|
||||
"num_query_type_AAAA": float64(4499711),
|
||||
"num_query_type_SRV": float64(5691),
|
||||
"num_query_type_ANY": float64(293411),
|
||||
"num_query_class_IN": float64(11907596),
|
||||
"num_query_opcode_QUERY": float64(11907596),
|
||||
"num_query_tcp": float64(293411),
|
||||
"num_query_ipv6": float64(0),
|
||||
"num_query_flags_QR": float64(0),
|
||||
"num_query_flags_AA": float64(0),
|
||||
"num_query_flags_TC": float64(0),
|
||||
"num_query_flags_RD": float64(11907596),
|
||||
"num_query_flags_RA": float64(0),
|
||||
"num_query_flags_Z": float64(0),
|
||||
"num_query_flags_AD": float64(1),
|
||||
"num_query_flags_CD": float64(0),
|
||||
"num_query_edns_present": float64(6202),
|
||||
"num_query_edns_DO": float64(6201),
|
||||
"num_answer_rcode_NOERROR": float64(11857463),
|
||||
"num_answer_rcode_SERVFAIL": float64(17),
|
||||
"num_answer_rcode_NXDOMAIN": float64(50116),
|
||||
"num_answer_rcode_nodata": float64(3914360),
|
||||
"num_answer_secure": float64(44289),
|
||||
"num_answer_bogus": float64(1),
|
||||
"num_rrset_bogus": float64(0),
|
||||
"unwanted_queries": float64(0),
|
||||
"unwanted_replies": float64(0),
|
||||
}
|
||||
|
||||
var parsedFullOutputThreadAsTagMeasurementUnboundThreads = map[string]interface{}{
|
||||
"num_queries": float64(11907596),
|
||||
"num_cachehits": float64(11489288),
|
||||
"num_cachemiss": float64(418308),
|
||||
"num_prefetch": float64(0),
|
||||
"num_recursivereplies": float64(418308),
|
||||
"requestlist_avg": float64(0.400229),
|
||||
"requestlist_max": float64(11),
|
||||
"requestlist_overwritten": float64(0),
|
||||
"requestlist_exceeded": float64(0),
|
||||
"requestlist_current_all": float64(0),
|
||||
"requestlist_current_user": float64(0),
|
||||
"recursion_time_avg": float64(0.015020),
|
||||
"recursion_time_median": float64(0.00292343),
|
||||
}
|
||||
|
||||
var parsedFullOutputThreadAsTagMeasurementUnbound = map[string]interface{}{
|
||||
"total_num_queries": float64(11907596),
|
||||
"total_num_cachehits": float64(11489288),
|
||||
"total_num_cachemiss": float64(418308),
|
||||
"total_num_prefetch": float64(0),
|
||||
"total_num_recursivereplies": float64(418308),
|
||||
"total_requestlist_avg": float64(0.400229),
|
||||
"total_requestlist_max": float64(11),
|
||||
"total_requestlist_overwritten": float64(0),
|
||||
"total_requestlist_exceeded": float64(0),
|
||||
"total_requestlist_current_all": float64(0),
|
||||
"total_requestlist_current_user": float64(0),
|
||||
"total_recursion_time_avg": float64(0.015020),
|
||||
"total_recursion_time_median": float64(0.00292343),
|
||||
"time_now": float64(1509968734.735180),
|
||||
"time_up": float64(1472897.672099),
|
||||
"time_elapsed": float64(1472897.672099),
|
||||
"mem_total_sbrk": float64(7462912),
|
||||
"mem_cache_rrset": float64(285056),
|
||||
"mem_cache_message": float64(320000),
|
||||
"mem_mod_iterator": float64(16532),
|
||||
"mem_mod_validator": float64(112097),
|
||||
"num_query_type_A": float64(7062688),
|
||||
"num_query_type_PTR": float64(43097),
|
||||
"num_query_type_TXT": float64(2998),
|
||||
"num_query_type_AAAA": float64(4499711),
|
||||
"num_query_type_SRV": float64(5691),
|
||||
"num_query_type_ANY": float64(293411),
|
||||
"num_query_class_IN": float64(11907596),
|
||||
"num_query_opcode_QUERY": float64(11907596),
|
||||
"num_query_tcp": float64(293411),
|
||||
"num_query_ipv6": float64(0),
|
||||
"num_query_flags_QR": float64(0),
|
||||
"num_query_flags_AA": float64(0),
|
||||
"num_query_flags_TC": float64(0),
|
||||
"num_query_flags_RD": float64(11907596),
|
||||
"num_query_flags_RA": float64(0),
|
||||
"num_query_flags_Z": float64(0),
|
||||
"num_query_flags_AD": float64(1),
|
||||
"num_query_flags_CD": float64(0),
|
||||
"num_query_edns_present": float64(6202),
|
||||
"num_query_edns_DO": float64(6201),
|
||||
"num_answer_rcode_NOERROR": float64(11857463),
|
||||
"num_answer_rcode_SERVFAIL": float64(17),
|
||||
"num_answer_rcode_NXDOMAIN": float64(50116),
|
||||
"num_answer_rcode_nodata": float64(3914360),
|
||||
"num_answer_secure": float64(44289),
|
||||
"num_answer_bogus": float64(1),
|
||||
"num_rrset_bogus": float64(0),
|
||||
"unwanted_queries": float64(0),
|
||||
"unwanted_replies": float64(0),
|
||||
}
|
||||
|
||||
var fullOutput = `thread0.num.queries=11907596
|
||||
thread0.num.cachehits=11489288
|
||||
thread0.num.cachemiss=418308
|
||||
thread0.num.prefetch=0
|
||||
thread0.num.recursivereplies=418308
|
||||
thread0.requestlist.avg=0.400229
|
||||
thread0.requestlist.max=11
|
||||
thread0.requestlist.overwritten=0
|
||||
thread0.requestlist.exceeded=0
|
||||
thread0.requestlist.current.all=0
|
||||
thread0.requestlist.current.user=0
|
||||
thread0.recursion.time.avg=0.015020
|
||||
thread0.recursion.time.median=0.00292343
|
||||
total.num.queries=11907596
|
||||
total.num.cachehits=11489288
|
||||
total.num.cachemiss=418308
|
||||
total.num.prefetch=0
|
||||
total.num.recursivereplies=418308
|
||||
total.requestlist.avg=0.400229
|
||||
total.requestlist.max=11
|
||||
total.requestlist.overwritten=0
|
||||
total.requestlist.exceeded=0
|
||||
total.requestlist.current.all=0
|
||||
total.requestlist.current.user=0
|
||||
total.recursion.time.avg=0.015020
|
||||
total.recursion.time.median=0.00292343
|
||||
time.now=1509968734.735180
|
||||
time.up=1472897.672099
|
||||
time.elapsed=1472897.672099
|
||||
mem.total.sbrk=7462912
|
||||
mem.cache.rrset=285056
|
||||
mem.cache.message=320000
|
||||
mem.mod.iterator=16532
|
||||
mem.mod.validator=112097
|
||||
histogram.000000.000000.to.000000.000001=20
|
||||
histogram.000000.000001.to.000000.000002=5
|
||||
histogram.000000.000002.to.000000.000004=13
|
||||
histogram.000000.000004.to.000000.000008=18
|
||||
histogram.000000.000008.to.000000.000016=67
|
||||
histogram.000000.000016.to.000000.000032=94
|
||||
histogram.000000.000032.to.000000.000064=113
|
||||
histogram.000000.000064.to.000000.000128=190
|
||||
histogram.000000.000128.to.000000.000256=369
|
||||
histogram.000000.000256.to.000000.000512=1034
|
||||
histogram.000000.000512.to.000000.001024=5503
|
||||
histogram.000000.001024.to.000000.002048=155724
|
||||
histogram.000000.002048.to.000000.004096=107623
|
||||
histogram.000000.004096.to.000000.008192=17739
|
||||
histogram.000000.008192.to.000000.016384=4177
|
||||
histogram.000000.016384.to.000000.032768=82021
|
||||
histogram.000000.032768.to.000000.065536=33772
|
||||
histogram.000000.065536.to.000000.131072=7159
|
||||
histogram.000000.131072.to.000000.262144=1109
|
||||
histogram.000000.262144.to.000000.524288=295
|
||||
histogram.000000.524288.to.000001.000000=890
|
||||
histogram.000001.000000.to.000002.000000=136
|
||||
histogram.000002.000000.to.000004.000000=233
|
||||
histogram.000004.000000.to.000008.000000=2
|
||||
histogram.000008.000000.to.000016.000000=0
|
||||
histogram.000016.000000.to.000032.000000=2
|
||||
histogram.000032.000000.to.000064.000000=0
|
||||
histogram.000064.000000.to.000128.000000=0
|
||||
histogram.000128.000000.to.000256.000000=0
|
||||
histogram.000256.000000.to.000512.000000=0
|
||||
histogram.000512.000000.to.001024.000000=0
|
||||
histogram.001024.000000.to.002048.000000=0
|
||||
histogram.002048.000000.to.004096.000000=0
|
||||
histogram.004096.000000.to.008192.000000=0
|
||||
histogram.008192.000000.to.016384.000000=0
|
||||
histogram.016384.000000.to.032768.000000=0
|
||||
histogram.032768.000000.to.065536.000000=0
|
||||
histogram.065536.000000.to.131072.000000=0
|
||||
histogram.131072.000000.to.262144.000000=0
|
||||
histogram.262144.000000.to.524288.000000=0
|
||||
num.query.type.A=7062688
|
||||
num.query.type.PTR=43097
|
||||
num.query.type.TXT=2998
|
||||
num.query.type.AAAA=4499711
|
||||
num.query.type.SRV=5691
|
||||
num.query.type.ANY=293411
|
||||
num.query.class.IN=11907596
|
||||
num.query.opcode.QUERY=11907596
|
||||
num.query.tcp=293411
|
||||
num.query.ipv6=0
|
||||
num.query.flags.QR=0
|
||||
num.query.flags.AA=0
|
||||
num.query.flags.TC=0
|
||||
num.query.flags.RD=11907596
|
||||
num.query.flags.RA=0
|
||||
num.query.flags.Z=0
|
||||
num.query.flags.AD=1
|
||||
num.query.flags.CD=0
|
||||
num.query.edns.present=6202
|
||||
num.query.edns.DO=6201
|
||||
num.answer.rcode.NOERROR=11857463
|
||||
num.answer.rcode.SERVFAIL=17
|
||||
num.answer.rcode.NXDOMAIN=50116
|
||||
num.answer.rcode.nodata=3914360
|
||||
num.answer.secure=44289
|
||||
num.answer.bogus=1
|
||||
num.rrset.bogus=0
|
||||
unwanted.queries=0
|
||||
unwanted.replies=0`
|
Loading…
Add table
Add a link
Reference in a new issue