Skip to content

Instantly share code, notes, and snippets.

@matschaffer
Last active August 29, 2015 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matschaffer/462b5ebdcfc359312ce1 to your computer and use it in GitHub Desktop.
Save matschaffer/462b5ebdcfc359312ce1 to your computer and use it in GitHub Desktop.
[hekad]
base_dir = "/tmp"
[StellarCoreMetricsInput]
type = "HttpInput"
url = "http://localhost:8000/metrics"
ticker_interval = 1
[StellarCoreMetricsFilter]
type = "SandboxFilter"
message_matcher = "Type == 'heka.httpinput.data'"
filename = "/Users/mat/stellar/ops/heka/stellar_core_metrics_filter.lua"
ticker_interval = 5
[StellarCoreMetricsFilter.config]
prefix = "local.matschaffer"
[StellarCoreMetricsInfluxOutput]
type = "HttpOutput"
message_matcher = "Type == 'heka.sandbox.stellar.core.metrics.influx'"
address = "http://localhost:8000/influx"
encoder = "PayloadEncoder"
username = "root"
password = "root"
[StellarCoreMetricsAtlasOutput]
type = "HttpOutput"
message_matcher = "Type == 'heka.sandbox.stellar.core.metrics.atlas'"
address = "http://localhost:8000/atlas"
encoder = "PayloadEncoder"
username = "root"
password = "root"
[StellarCoreMetricsAtlasOutput.headers]
Content-Type = ["application/json"]
[DebugOutput]
#message_matcher = "Type == 'heka.sandbox.stellar.debug'"
message_matcher = "Type == 'heka.sandbox-terminated'"
#message_matcher = "Type == 'heka.sandbox-terminated'"
#message_matcher = "TRUE"
#message_matcher = "Type != 'heka.httpinput.data'"
type = "LogOutput"
encoder = "RstEncoder"
[RstEncoder]
[PayloadEncoder]
package main
import (
"fmt"
"io"
"io/ioutil"
"net/http"
)
var influxCount = 0
var atlasCount = 0
func metrics(w http.ResponseWriter, r *http.Request) {
buf, err := ioutil.ReadFile("./metrics.json")
if err != nil {
panic(err)
}
w.Header().Set("Content-Type", "application/json")
io.WriteString(w, string(buf))
}
func influx(w http.ResponseWriter, r *http.Request) {
buf, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
ioutil.WriteFile(fmt.Sprintf("influx/%04d.json", influxCount), buf, 0644)
influxCount++
io.WriteString(w, "ok")
}
func atlas(w http.ResponseWriter, r *http.Request) {
contentType := r.Header["Content-Type"][0]
if contentType != "application/json" {
panic(fmt.Sprintf("Header was %s, expecting application/json", contentType))
}
buf, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
ioutil.WriteFile(fmt.Sprintf("atlas/%04d.json", atlasCount), buf, 0644)
atlasCount++
io.WriteString(w, "ok")
}
func main() {
http.HandleFunc("/metrics", metrics)
http.HandleFunc("/influx", influx)
http.HandleFunc("/atlas", atlas)
http.ListenAndServe(":8000", nil)
}
{
"ts":"2015-04-21T05:34:00Z",
"uname":"core-001.stg.stellar001.internal.stellar-ops.com",
"metrics":{
"bucket.batch.add":{
"type":"timer",
"count":7123,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.241479,
"1_min_rate":0.260454,
"5_min_rate":0.264505,
"15_min_rate":0.267672,
"duration_unit":"ms",
"min":0.3552,
"max":4.31495,
"mean":0.54571,
"stddev":0.163259,
"median":0.53692,
"75%":0.587508,
"95%":0.785747,
"98%":0.785747,
"99%":0.785747,
"99.9%":0.785747
}
,"bucket.byte.insert":{
"type":"meter",
"count":0,
"event_type":"byte",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"bucket.memory.shared":{
"type":"counter",
"count":1
}
,"bucket.object.insert":{
"type":"meter",
"count":0,
"event_type":"object",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"bucket.snap.merge":{
"type":"timer",
"count":18991,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.64382,
"1_min_rate":0.730233,
"5_min_rate":0.710049,
"15_min_rate":0.713865,
"duration_unit":"ms",
"min":0.047448,
"max":0.792982,
"mean":0.0825792,
"stddev":0.0660188,
"median":0.0604605,
"75%":0.078586,
"95%":0.138694,
"98%":0.139128,
"99%":0.139128,
"99.9%":0.139128
}
,"database.insert.ledger-header":{
"type":"timer",
"count":7123,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.241739,
"1_min_rate":0.27512,
"5_min_rate":0.26678,
"15_min_rate":0.26825,
"duration_unit":"ms",
"min":0.191221,
"max":0.574914,
"mean":0.258712,
"stddev":0.0393977,
"median":0.260537,
"75%":0.264861,
"95%":0.483716,
"98%":0.483716,
"99%":0.483716,
"99.9%":0.483716
}
,"database.insert.peer":{
"type":"timer",
"count":19,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.000644169,
"1_min_rate":1.63009e-61,
"5_min_rate":5.25934e-15,
"15_min_rate":1.29357e-07,
"duration_unit":"ms",
"min":0.267453,
"max":5.60998,
"mean":0.771783,
"stddev":1.31716,
"median":0.330832,
"75%":0.361301,
"95%":0.361301,
"98%":0.361301,
"99%":0.361301,
"99.9%":0.361301
}
,"database.memory.statements":{
"type":"counter",
"count":0
}
,"database.select.ledger-header":{
"type":"timer",
"count":1,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":3.39013e-05,
"1_min_rate":2.32117e-194,
"5_min_rate":5.17565e-40,
"15_min_rate":2.74584e-14,
"duration_unit":"ms",
"min":0.650863,
"max":0.650863,
"mean":0.650863,
"stddev":0,
"median":0.650863,
"75%":0.650863,
"95%":0.650863,
"98%":0.650863,
"99%":0.650863,
"99.9%":0.650863
}
,"database.select.ledger-header-history":{
"type":"timer",
"count":111,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.00380096,
"1_min_rate":0.00466701,
"5_min_rate":0.00467664,
"15_min_rate":0.00441305,
"duration_unit":"ms",
"min":1.36559,
"max":3.33133,
"mean":1.72323,
"stddev":0.197948,
"median":1.6713,
"75%":1.72589,
"95%":1.72589,
"98%":1.72589,
"99%":1.72589,
"99.9%":1.72589
}
,"database.select.peer":{
"type":"timer",
"count":14754,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.500214,
"1_min_rate":0.551333,
"5_min_rate":0.547613,
"15_min_rate":0.546388,
"duration_unit":"ms",
"min":0.254778,
"max":2.21566,
"mean":0.68871,
"stddev":0.0639192,
"median":0.702996,
"75%":0.735974,
"95%":0.751435,
"98%":0.756638,
"99%":0.756638,
"99.9%":0.756638
}
,"database.select.state":{
"type":"timer",
"count":6,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.000203408,
"1_min_rate":1.51373e-193,
"5_min_rate":3.15758e-39,
"15_min_rate":1.65668e-13,
"duration_unit":"ms",
"min":0.209072,
"max":1.45294,
"mean":0.432781,
"stddev":0.500017,
"median":0.237397,
"75%":0.548651,
"95%":1.45294,
"98%":1.45294,
"99%":1.45294,
"99.9%":1.45294
}
,"database.select.txhistory":{
"type":"timer",
"count":111,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.00380096,
"1_min_rate":0.00466701,
"5_min_rate":0.00467506,
"15_min_rate":0.00440368,
"duration_unit":"ms",
"min":0.3527,
"max":0.683855,
"mean":0.431933,
"stddev":0.0543622,
"median":0.421779,
"75%":0.454487,
"95%":0.454487,
"98%":0.454487,
"99%":0.454487,
"99.9%":0.454487
}
,"database.update.peer":{
"type":"timer",
"count":16,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.000542458,
"1_min_rate":1.63009e-61,
"5_min_rate":5.25934e-15,
"15_min_rate":1.29357e-07,
"duration_unit":"ms",
"min":1.48349,
"max":3.37239,
"mean":2.4398,
"stddev":0.779665,
"median":1.78856,
"75%":1.83448,
"95%":1.83448,
"98%":1.83448,
"99%":1.83448,
"99.9%":1.83448
}
,"database.update.state":{
"type":"timer",
"count":14247,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.482992,
"1_min_rate":0.548351,
"5_min_rate":0.533178,
"15_min_rate":0.535407,
"duration_unit":"ms",
"min":0.161756,
"max":1.84784,
"mean":0.2097,
"stddev":0.0255563,
"median":0.207193,
"75%":0.226764,
"95%":0.251164,
"98%":0.257592,
"99%":0.257592,
"99.9%":0.257592
}
,"history.catchup.failure":{
"type":"meter",
"count":0,
"event_type":"event",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"history.catchup.start":{
"type":"meter",
"count":0,
"event_type":"event",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"history.catchup.success":{
"type":"meter",
"count":0,
"event_type":"event",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"history.memory.pending-snaps":{
"type":"counter",
"count":0
}
,"history.memory.publishers":{
"type":"counter",
"count":0
}
,"history.publish.delay":{
"type":"meter",
"count":0,
"event_type":"event",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"history.publish.failure":{
"type":"meter",
"count":0,
"event_type":"event",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"history.publish.queue":{
"type":"meter",
"count":111,
"event_type":"event",
"rate_unit":"s",
"mean_rate":0.00376305,
"1_min_rate":0.0050653,
"5_min_rate":0.00473811,
"15_min_rate":0.00442642
}
,"history.publish.skip":{
"type":"meter",
"count":0,
"event_type":"event",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"history.publish.start":{
"type":"meter",
"count":111,
"event_type":"event",
"rate_unit":"s",
"mean_rate":0.00376305,
"1_min_rate":0.00466701,
"5_min_rate":0.00467892,
"15_min_rate":0.00440622
}
,"history.publish.success":{
"type":"meter",
"count":111,
"event_type":"event",
"rate_unit":"s",
"mean_rate":0.00376305,
"1_min_rate":0.0050653,
"5_min_rate":0.0047353,
"15_min_rate":0.00442841
}
,"ledger.ledger.close":{
"type":"timer",
"count":7124,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0.241513,
"1_min_rate":0.27417,
"5_min_rate":0.266566,
"15_min_rate":0.267715,
"duration_unit":"ms",
"min":3.2352,
"max":16.019,
"mean":5.01594,
"stddev":1.01539,
"median":5.23593,
"75%":5.49466,
"95%":6.41943,
"98%":6.41943,
"99%":6.41943,
"99.9%":6.41943
}
,"ledger.memory.syncing-ledgers":{
"type":"counter",
"count":0
}
,"ledger.transaction.apply":{
"type":"timer",
"count":0,
"event_type":"calls",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0,
"duration_unit":"ms",
"min":0,
"max":0,
"mean":0,
"stddev":0,
"median":0,
"75%":0,
"95%":0,
"98%":0,
"99%":0,
"99.9%":0
}
,"overlay.byte.read":{
"type":"meter",
"count":43721232,
"event_type":"byte",
"rate_unit":"s",
"mean_rate":1482.31,
"1_min_rate":1513.09,
"5_min_rate":1477.8,
"15_min_rate":1476.38
}
,"overlay.byte.write":{
"type":"meter",
"count":43819312,
"event_type":"byte",
"rate_unit":"s",
"mean_rate":1485.63,
"1_min_rate":1524.29,
"5_min_rate":1506.01,
"15_min_rate":1507
}
,"overlay.connection.attempt":{
"type":"meter",
"count":16,
"event_type":"connection",
"rate_unit":"s",
"mean_rate":0.000542421,
"1_min_rate":1.77175e-61,
"5_min_rate":5.34773e-15,
"15_min_rate":1.30077e-07
}
,"overlay.connection.drop":{
"type":"meter",
"count":27,
"event_type":"connection",
"rate_unit":"s",
"mean_rate":0.000915336,
"1_min_rate":3.5435e-61,
"5_min_rate":1.06955e-14,
"15_min_rate":2.60155e-07
}
,"overlay.connection.establish":{
"type":"meter",
"count":29,
"event_type":"connection",
"rate_unit":"s",
"mean_rate":0.000983138,
"1_min_rate":3.85145e-61,
"5_min_rate":1.08752e-14,
"15_min_rate":2.61604e-07
}
,"overlay.connection.reject":{
"type":"meter",
"count":0,
"event_type":"connection",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"overlay.error.read":{
"type":"meter",
"count":11,
"event_type":"error",
"rate_unit":"s",
"mean_rate":0.00037294,
"1_min_rate":1.92572e-61,
"5_min_rate":5.43761e-15,
"15_min_rate":1.30802e-07
}
,"overlay.error.write":{
"type":"meter",
"count":0,
"event_type":"error",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"overlay.memory.flood-map":{
"type":"counter",
"count":18
}
,"overlay.memory.item-fetch-map":{
"type":"counter",
"count":2
}
,"overlay.memory.peers":{
"type":"counter",
"count":2
}
,"overlay.message.broadcast":{
"type":"meter",
"count":123893,
"event_type":"message",
"rate_unit":"s",
"mean_rate":4.20014,
"1_min_rate":4.18418,
"5_min_rate":4.07676,
"15_min_rate":4.05323
}
,"overlay.message.read":{
"type":"meter",
"count":148747,
"event_type":"message",
"rate_unit":"s",
"mean_rate":5.04306,
"1_min_rate":5.13132,
"5_min_rate":5.0269,
"15_min_rate":5.02789
}
,"overlay.message.receive":{
"type":"meter",
"count":146204,
"event_type":"message",
"rate_unit":"s",
"mean_rate":4.95651,
"1_min_rate":5.06811,
"5_min_rate":4.95073,
"15_min_rate":4.94187
}
,"overlay.message.write":{
"type":"meter",
"count":149063,
"event_type":"message",
"rate_unit":"s",
"mean_rate":5.05378,
"1_min_rate":5.16559,
"5_min_rate":5.11464,
"15_min_rate":5.12598
}
,"overlay.timeout.read":{
"type":"meter",
"count":11,
"event_type":"timeout",
"rate_unit":"s",
"mean_rate":0.00037294,
"1_min_rate":3.17498e-61,
"5_min_rate":6.00948e-15,
"15_min_rate":1.35236e-07
}
,"overlay.timeout.write":{
"type":"meter",
"count":0,
"event_type":"timeout",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"process.memory.handles":{
"type":"counter",
"count":0
}
,"scp.ballot.commit":{
"type":"meter",
"count":7121,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":0.241411,
"1_min_rate":0.25872,
"5_min_rate":0.263417,
"15_min_rate":0.266391
}
,"scp.ballot.committed":{
"type":"meter",
"count":7123,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":0.241479,
"1_min_rate":0.25872,
"5_min_rate":0.263406,
"15_min_rate":0.266375
}
,"scp.ballot.expire":{
"type":"meter",
"count":0,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"scp.ballot.invalid":{
"type":"meter",
"count":13034,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":0.44187,
"1_min_rate":0.448764,
"5_min_rate":0.450431,
"15_min_rate":0.423347
}
,"scp.ballot.invalidsig":{
"type":"meter",
"count":0,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"scp.ballot.prepare":{
"type":"meter",
"count":11283,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":0.382509,
"1_min_rate":0.36626,
"5_min_rate":0.369402,
"15_min_rate":0.377884
}
,"scp.ballot.prepared":{
"type":"meter",
"count":0,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"scp.ballot.sign":{
"type":"meter",
"count":5892,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":0.199747,
"1_min_rate":0.2,
"5_min_rate":0.2,
"15_min_rate":0.2
}
,"scp.ballot.valid":{
"type":"meter",
"count":29455,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":0.998563,
"1_min_rate":1.04542,
"5_min_rate":1.04529,
"15_min_rate":1.06121
}
,"scp.ballot.validsig":{
"type":"meter",
"count":328548,
"event_type":"ballot",
"rate_unit":"s",
"mean_rate":11.1382,
"1_min_rate":10.5096,
"5_min_rate":10.6638,
"15_min_rate":10.818
}
,"scp.envelope.emit":{
"type":"meter",
"count":54316,
"event_type":"envelope",
"rate_unit":"s",
"mean_rate":1.84138,
"1_min_rate":1.7861,
"5_min_rate":1.80798,
"15_min_rate":1.8128
}
,"scp.envelope.invalidsig":{
"type":"meter",
"count":0,
"event_type":"envelope",
"rate_unit":"s",
"mean_rate":0,
"1_min_rate":0,
"5_min_rate":0,
"15_min_rate":0
}
,"scp.envelope.receive":{
"type":"meter",
"count":146204,
"event_type":"envelope",
"rate_unit":"s",
"mean_rate":4.95651,
"1_min_rate":5.06812,
"5_min_rate":4.95077,
"15_min_rate":4.94188
}
,"scp.envelope.sign":{
"type":"meter",
"count":46436,
"event_type":"envelope",
"rate_unit":"s",
"mean_rate":1.57424,
"1_min_rate":1.42368,
"5_min_rate":1.44169,
"15_min_rate":1.4587
}
,"scp.envelope.validsig":{
"type":"meter",
"count":75641,
"event_type":"envelope",
"rate_unit":"s",
"mean_rate":2.56433,
"1_min_rate":2.51758,
"5_min_rate":2.55697,
"15_min_rate":2.55854
}
,"scp.memory.ballot-validation-timers":{
"type":"counter",
"count":0
}
,"scp.memory.cumulative-cached-quorum-sets":{
"type":"counter",
"count":3
}
,"scp.memory.cumulative-statements":{
"type":"counter",
"count":7
}
,"scp.memory.future-envelopes":{
"type":"counter",
"count":1
}
,"scp.memory.known-nodes":{
"type":"counter",
"count":3
}
,"scp.memory.known-slots":{
"type":"counter",
"count":5
}
,"scp.memory.node-last-access":{
"type":"counter",
"count":3
}
,"scp.memory.qset-fetches":{
"type":"counter",
"count":0
}
,"scp.qset.retrieve":{
"type":"meter",
"count":2,
"event_type":"qset",
"rate_unit":"s",
"mean_rate":6.78026e-05,
"1_min_rate":2.4649e-194,
"5_min_rate":2.45852e-41,
"15_min_rate":3.43007e-16
}
,"scp.quorum.heard":{
"type":"meter",
"count":7128,
"event_type":"quorum",
"rate_unit":"s",
"mean_rate":0.241649,
"1_min_rate":0.274711,
"5_min_rate":0.266682,
"15_min_rate":0.267442
}
,"scp.value.externalize":{
"type":"meter",
"count":7123,
"event_type":"value",
"rate_unit":"s",
"mean_rate":0.241479,
"1_min_rate":0.260765,
"5_min_rate":0.263547,
"15_min_rate":0.266473
}
,"scp.value.invalid":{
"type":"meter",
"count":6064,
"event_type":"value",
"rate_unit":"s",
"mean_rate":0.205578,
"1_min_rate":0.167503,
"5_min_rate":0.202222,
"15_min_rate":0.221011
}
,"scp.value.prepare":{
"type":"meter",
"count":5891,
"event_type":"value",
"rate_unit":"s",
"mean_rate":0.199713,
"1_min_rate":0.2,
"5_min_rate":0.2,
"15_min_rate":0.200067
}
,"scp.value.valid":{
"type":"meter",
"count":102234,
"event_type":"value",
"rate_unit":"s",
"mean_rate":3.46587,
"1_min_rate":3.21166,
"5_min_rate":3.25772,
"15_min_rate":3.27156
}
}}
local cj = require "cjson"
local dt = require "date_time"
local l = require "lpeg"
local table = require "table"
local math = require "math"
local prefix = read_config("prefix")
local latest_stats = {}
function process_message()
local raw_message = read_message("Payload")
local ok, json = pcall(cj.decode, raw_message)
if not ok then return -1 end
if json["ts"] ~= nil then
local ts = lpeg.match(dt.rfc3339, json["ts"])
if not ts then return -1 end
local timestamp = dt.time_to_ns(ts)
end
for name, stats in pairs(json["metrics"]) do
if stats.type == "timer" then
process_metric(timestamp, name, stats, {
"count", "1_min_rate",
"min", "mean", "max", "95%", "99%", "99.9%"
})
elseif stats.type == "meter" then
process_metric(timestamp, name, stats, {
"count", "1_min_rate",
})
elseif stats.type == "counter" then
process_metric(timestamp, name, stats, {
"count"
})
end
end
return 0
end
function send_to_influx(ns)
local message = {
Timestamp = ns,
Type = "stellar.core.metrics.influx"
}
local time = math.floor(ns / 1000000)
local output = {}
for name, stats in pairs(latest_stats) do
if prefix then
name = prefix .. "." .. name
end
local point_set = {
name = name,
columns = {"time"},
points = {{time}}
}
for stat, value in pairs(stats) do
table.insert(point_set.columns, stat)
table.insert(point_set.points[1], value)
end
table.insert(output, point_set)
end
message.Payload = cjson.encode(output)
inject_message(message)
end
function send_to_atlas(ns)
local message = {
Timestamp = ns,
Type = "stellar.core.metrics.atlas"
}
local time = math.floor(ns / 1000000)
local output = {
tags = {
prefix = prefix,
app = "stellar-core"
},
metrics = {
}
}
for name, stats in pairs(latest_stats) do
for stat, value in pairs(stats) do
local metric_payload = {
tags = {
name = name,
stat = stat,
["atlas.dstype"] = "gauge"
},
timestamp = time,
value = value
}
table.insert(output.metrics, metric_payload)
end
end
message.Payload = cjson.encode(output)
inject_message(message)
end
function timer_event(ns)
send_to_influx(ns)
send_to_atlas(ns)
end
function process_metric(timestamp, name, stats, stat_whitelist)
local selected_stats = {}
for i, stat in ipairs(stat_whitelist) do
selected_stats[stat] = stats[stat]
end
latest_stats[name] = selected_stats
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment