github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/metrics/flags.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:43</date>
    10  //</624450113313443840>
    11  
    12  
    13  package metrics
    14  
    15  import (
    16  	"time"
    17  
    18  	"github.com/ethereum/go-ethereum/cmd/utils"
    19  	gethmetrics "github.com/ethereum/go-ethereum/metrics"
    20  	"github.com/ethereum/go-ethereum/metrics/influxdb"
    21  	"github.com/ethereum/go-ethereum/swarm/log"
    22  	"gopkg.in/urfave/cli.v1"
    23  )
    24  
    25  var (
    26  	MetricsEnableInfluxDBExportFlag = cli.BoolFlag{
    27  		Name:  "metrics.influxdb.export",
    28  		Usage: "Enable metrics export/push to an external InfluxDB database",
    29  	}
    30  	MetricsInfluxDBEndpointFlag = cli.StringFlag{
    31  		Name:  "metrics.influxdb.endpoint",
    32  		Usage: "Metrics InfluxDB endpoint",
    33  Value: "http://127.0.0.1:8086“,
    34  	}
    35  	MetricsInfluxDBDatabaseFlag = cli.StringFlag{
    36  		Name:  "metrics.influxdb.database",
    37  		Usage: "Metrics InfluxDB database",
    38  		Value: "metrics",
    39  	}
    40  	MetricsInfluxDBUsernameFlag = cli.StringFlag{
    41  		Name:  "metrics.influxdb.username",
    42  		Usage: "Metrics InfluxDB username",
    43  		Value: "",
    44  	}
    45  	MetricsInfluxDBPasswordFlag = cli.StringFlag{
    46  		Name:  "metrics.influxdb.password",
    47  		Usage: "Metrics InfluxDB password",
    48  		Value: "",
    49  	}
    50  //“host”标记是发送到influxdb的每个度量的一部分。在influxdb中,对标签的查询更快。
    51  //它的使用是为了让我们可以对所有节点进行分组,并对所有节点的测量值进行平均,但也同样如此
    52  //我们可以选择一个特定的节点并检查它的测量值。
    53  //https://docs.influxdata.com/influxdb/v1.4/concepts/key_-concepts/标记密钥
    54  	MetricsInfluxDBHostTagFlag = cli.StringFlag{
    55  		Name:  "metrics.influxdb.host.tag",
    56  		Usage: "Metrics InfluxDB `host` tag attached to all measurements",
    57  		Value: "localhost",
    58  	}
    59  )
    60  
    61  //标志保存度量集合所需的所有命令行标志。
    62  var Flags = []cli.Flag{
    63  	utils.MetricsEnabledFlag,
    64  	MetricsEnableInfluxDBExportFlag,
    65  	MetricsInfluxDBEndpointFlag,
    66  	MetricsInfluxDBDatabaseFlag,
    67  	MetricsInfluxDBUsernameFlag,
    68  	MetricsInfluxDBPasswordFlag,
    69  	MetricsInfluxDBHostTagFlag,
    70  }
    71  
    72  func Setup(ctx *cli.Context) {
    73  	if gethmetrics.Enabled {
    74  		log.Info("Enabling swarm metrics collection")
    75  		var (
    76  			enableExport = ctx.GlobalBool(MetricsEnableInfluxDBExportFlag.Name)
    77  			endpoint     = ctx.GlobalString(MetricsInfluxDBEndpointFlag.Name)
    78  			database     = ctx.GlobalString(MetricsInfluxDBDatabaseFlag.Name)
    79  			username     = ctx.GlobalString(MetricsInfluxDBUsernameFlag.Name)
    80  			password     = ctx.GlobalString(MetricsInfluxDBPasswordFlag.Name)
    81  			hosttag      = ctx.GlobalString(MetricsInfluxDBHostTagFlag.Name)
    82  		)
    83  
    84  //启动系统运行时度量集合
    85  		go gethmetrics.CollectProcessMetrics(2 * time.Second)
    86  
    87  		if enableExport {
    88  			log.Info("Enabling swarm metrics export to InfluxDB")
    89  			go influxdb.InfluxDBWithTags(gethmetrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "swarm.", map[string]string{
    90  				"host": hosttag,
    91  			})
    92  		}
    93  	}
    94  }
    95