statsd statsd也是一款数据采集工具。 statsd狭义来讲,其实就是一个监听UDP(默认)或者TCP的守护程序,根据简单的协议收集statsd客户端发送来的数据,聚合之后,定时推送给后端,如graphite和influxdb等,再通过grafana statsd 其实也有很多第三方包用来收集数据,但是statsd支持的类型较少,度量只有四种,所以我只用statsd作为传输协议进行数据传输。 所以没有直接使用下面介绍的这4个第三方包 git 官方介绍了4种,地址:https://github.com/statsd/statsd/wiki#client-implementations statsd statsd: https://github.com/alexcesaro/statsd statsd: https://github.com/quipo/statsd g2s : https://github.com
通过 Statsd ,能通过特定语言的客户端检测应用程序的指标。基于个性化需求,可以通过 Statsd 收集任何想要的数据。 所以要么 StatsD 接收了这个包,要么没有。应用不会在意 StatsD 是运行、宕机还是着火了,它单纯地相信一切运行正常。 StatsD 的一些概念 为了更加了解 StatsD,我们先来了解几个 StatsD 概念:buckets、values、flush interval。 StatsD 的延伸 收集和可视化数据是对服务器和应用做出明智决定的重要方式,StatsD 具有以下优点: 简单——非常容易获取的应用程序,StatsD 协议是基于文本的,可以直接写入和读取。 StatsD 生态环境 在国外基于 StatsD 产生了一系列的工具,或者在成熟的项目基础之上,开始兼容 StatsD。如果按照方向可以划分为如图的几个方向。 ?
=true # StatsD line protocol to use. datalog or esty management.metrics.export.statsd.flavor=etsy # Host of the StatsD server to receive exported metrics. management.metrics.export.statsd.host=192.168.99.100 # Port of the StatsD server to receive exported metrics. management.metrics.export.statsd.port=8125 the StatsD server. management.metrics.export.statsd.publish-unchanged-meters=true # Maximum size of the queue of items waiting to be sent to the StatsD server. management.metrics.export.statsd.queue-size
序 本文主要研究下springboot2自定义statsd指标前缀 背景 springboot2引入了micrometer,1.x版本的spring.metrics.export.statsd.prefix FlavorStatsdLineBuilder micrometer-registry-statsd-1.0.1-sources.jar! /io/micrometer/statsd/internal/FlavorStatsdLineBuilder.java /** * A Statsd serializer for a particular /org/springframework/boot/actuate/autoconfigure/metrics/export/statsd/StatsdMetricsExportAutoConfiguration.java 小结 springboot2目前虽然没有通过配置文件直接支持指定statsd的prefix,但是可以通过少许代码自定义HierarchicalNameMapper来实现。
swift在版本2.1.0之前如果各个服务的配置文件中打开以下配置后,且系统没有配置正确将会出现上传对象出错的情况 log_statsd_host = localhost log_statsd_port = 8125 log_statsd_default_sample_rate = 1.0 log_statsd_sample_rate_factor = 1.0 log_statsd_metric_prefix python2.6/site-packages/swift/common/utils.py", line 654, in wrapped#012 return func(self.logger.statsd_client 解决办法: 根据上面的信息,得知8125端口是StatsD服务端口,因此是StatsD的客户端出了问题。
---------+ +--------------+ | StatsD |---(UDP/TCP repeater)--->| statsd_exporter -1.0.0 release: RELEASE-NAME Istio: statsd-prom-bridge spec: ports: - name: statsd-prom port: 9102 - name: statsd-udp port: 9125 protocol: UDP selector: Istio: statsd-prom-bridge 这里,如果修改istio-statsd-prom-bridge这个服务的Service type类型,则可能导致ingressgateway失败,因为istio-statsd-prom-bridge的 转换为 prometheus ) 这个是istio-statsd-prom-bridge组件提供的服务 pre环境验证中可以将istio-telemetry和istio-statsd-prom-bridge
部署架构 下图是该方案的部署架构,主要包括: 利用Heapster收集K8s的性能数据,包含CPU,Memory,Network,File System等 利用Heapster的Statsd Sink, 因为Splunk的Metrics Store支持statsd协议,所以可以很容易的和Heapster集成。 首先我们需要利用最新的heapster代码,编译一个容器镜像,因为docker hub上的heapsterd的官方镜像的版本比较旧,并不支持statsd。所以需要自己编译。 /statsd_client.go func (client *statsdClientImpl) open() error { var err error client.conn, err .Infof("statsd client connection opened : %+v", client.conn) } return err } 把udp改成tcp。
metrics 客户端 数据采集使用go-metrics 传输使用UDP, 仿StatsD上传采集数据, InfluxDB进行数据存储, Grafana进行展示。 使用的all-in-one : git docker-statsd-influxdb-grafana docker hub 地址 数据封装 //挂载配置文件,已修改statsd模版 docker run -p 3003:3003 -p 3004:8888 -p 8086:8086 -p 8125:8125/udp samuelebistoletti/docker-statsd-influxdb-grafana :latest register register 使用的name 必须是不同的 telegraf 配置修改 将 [[inputs.statsd]] 部分配置打开, 修改templates为: templates function func StatsDWithConfig(c Config) { for _ = range time.Tick(c.FlushInterval) { if err := statsd
metrics: 项目代码中监控信息采集使用, 支持gc、mem 等信息收集 statsd: 使用statsd进行udp数据的传输, telegraf: 项目外部数据收集使用telegraf influxdb TCP 因为要握手所以对性能有影响, 想使用UDP 作为传输方式, 然后找到 statsd 是支持TCP/UDP 方式进行传输的,但是 statsd 支持支持的类型很少,并不能完全满足采集到的metrics 所以需要将metrics 采集以后 复杂的类型转换成 statsd 基础类型进行传输。 原有系统有用telegraf 支持docker外部的信息采集,并且可以添加statsd插件,这样既可以采集到代码之外的性能指标的,也可以方便的将statsd 传输数据存入influxdb中, 然后再用grafana
添加配置文件 复制配置文件:cp .env.example .env 修改配置文件:vi .env PORT=3000 NODE_ENV=production STATSD_HOST=127.0.0.1 STATSD_HOST: If you would like to collect metrics with statsd, this should be set to the host of your statsd server. STATSD_PORT: If you would like to collect metrics with statsd, this should be set to the port of your statsd server. 3.
, prometheus, or disabled Provider: disabled # The statsd configuration Statsd: # network type: tcp or udp Network: udp # the statsd server address Address: 127.0.0.1:8125 # The interval at which locally cached counters and gauges are pushed # to statsd; timings metrics Prefix: 配置为statsd的话, 需要orderer主动推送运行指标到statsd服务器, 设置一些写的间隔, statsd如何鉴权没提, 估计是ip白名单, 具体细节要查下 statsd文档。
05:08 >> WARNING: found process running as root: tail -f /dev/null pid: 365 报告模块 目前,Cnitch可以将发现的信息报告给StatsD StatsD Cnitch会利用cnitch.exception.root_process方法将检测到的信息发送给StatsD,并且每条信息都会使用Cnitch示例的host名称以及container名称进行标记 参数选项 --hostname=[hostname]:用于整合信息的名称或IP地址 --statsd-server=[hostname:port]:StatsD收集器的URI,如果忽略该参数,那么StatsD root进程的频率 命令行 设置Docker引擎API的“DOCKER_HOST”环境变量,然后使用下列参数在命令行工具中运行Cnitch: $ cnitch --hostname=myhost --statsd-server /var/run/docker.sock" \ quay.io/nicholasjackson/cnitch [options] 工具使用样例 在下面的例子中,显示了Cnitch如何将数据导出至StatsD
您也可以显式禁用它: management.metrics.export.simple.enabled=false 57.2.16 StatsD StatsD注册表急需将UDP上的指标推送到StatsD 默认情况下,度量标准将导出到本地计算机上运行的StatsD代理程序。 可以使用以下方式 提供要使用的StatsD代理主机和端口: management.metrics.export.statsd.host=statsd.example.com management.metrics.export.statsd.port =9125 您还可以更改要使用的StatsD行协议(默认为Datadog): management.metrics.export.statsd.flavor=etsy 57.2.17 Wavefront
版本目前支持了如下类型的export: atlas、datadog、ganglia、graphite、influx、jmx、newrelic、prometheus、properties、signalfx、simple、statsd /org/springframework/boot/actuate/autoconfigure/metrics/export/statsd/StatsdMetricsExportAutoConfiguration.java ConditionalOnClass(StatsdMeterRegistry.class) @ConditionalOnProperty(prefix = "management.metrics.export.statsd , PauseDetector pauseDetector); 这里有调用了newTimer抽象方法 StatsdMeterRegistry.newTimer micrometer-registry-statsd /io/micrometer/statsd/StatsdMeterRegistry.java @SuppressWarnings("ConstantConditions") @Override
StatsD: Spring Boot有一篇文章是关于自定义导出数据给StatsD。然而,你除了要为Spring Boot应用安装StatsD实例之外,还不得不实现一些存根来让它工作起来。 If you get there, you can configure it along StatsD to get metrics working in a chart. 然而,这种方式与StatsD类似,你必须实现和维护自定义的代码来让它工作起来。另外,OpenTSDB没有开箱即用的图形可视化工具。
AppOptics 监控后端发送日志和指标数据 Stackdriver stackdriver metric,logentry,tracespan 为 StackDriver 提供日志、指标和跟踪数据 StatsD statsd metric 为 statsd 提供指标数据 Stdio stdio metric,logentry 在本机输出日志或指标数据
metrics进行了重构,另外支持对接的监控系统也更加丰富(Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD 这是一个很重要的信号,标志着老一代的statsd、graphite逐步让步于支持tag的influx以及prometheus。 etsy原版的statsd是不支持tag的,不过datadog以及influx都有对statsd进行改良以支持tag。而influxdb以及prometheus则是天生支持tag的。 像statsd不支持tag,如果要区分多host的同一个jvm指标,则通常是通过添加prefix来解决,不过这个给查询统计以及后续扩展带了诸多的不变。 doc metrics.dropwizard Support for Statsd Tags/Dimensions #1536 Getting Started with Sending StatsD Metrics
/var" # Inner Http status address stat_addr = "192.168.2.4:12800" # statsd monitor statsd_host = "127.0.0.1 " statsd_port = 8125 statsd_prefix = "dbsync" # 伪装成slave时候,配置的server-id server_id = 1001 flavor = "mysql
我们在所有相关主机上使用 ansible 部署 metricbeat 进行指标的收集,通过配置文件的配置,可以采集到 docker 的资源使用、系统 CPU、内存、磁盘、网络的使用状态,同时也开放了 statsd 监控应用相关的指标 当我们需要监控应用相关的指标时,我们可以通过 statsd 的接口,将指标发布至 metricbeat,统一收集至 Elasticsearch 当中。 statsd 底层规则相对简单,所以在每个编程语言中都有相应的 SDK 可以直接使用,并没有复杂的依赖: https://github.com/statsd/statsd/wiki 但是目前 metricbeat 收集来的 statsd 信息是不支持 tag 的,所以还只能做一些简单的指标收集,并不能对同一指标的不同维度做聚合分析。
以下是使用指标数据的示例代码:from statsd import StatsClient # 创建 StatsD 客户端 statsd = StatsClient(host='your_statsd_host ', port=your_statsd_port) # 发送指标数据 statsd.incr('user.login') # 计数器增加 statsd.timing('task.run',