forked from influxdata/telegraf
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a starlark example showing how to obtain IOPS (influxdata#8996)
- Loading branch information
1 parent
67f588c
commit 67e8d76
Showing
2 changed files
with
55 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
# Example showing how to obtain IOPS (to aggregate, to produce max_iops). Input can be produced by: | ||
# | ||
#[[inputs.diskio]] | ||
# alias = "diskio1s" | ||
# interval = "1s" | ||
# fieldpass = ["reads", "writes"] | ||
# name_suffix = "1s" | ||
# | ||
# Example Input: | ||
# diskio1s,host=hostname,name=diska reads=0i,writes=0i 1554079521000000000 | ||
# diskio1s,host=hostname,name=diska reads=0i,writes=0i 1554079522000000000 | ||
# diskio1s,host=hostname,name=diska reads=110i,writes=0i 1554079523000000000 | ||
# diskio1s,host=hostname,name=diska reads=110i,writes=30i 1554079524000000000 | ||
# diskio1s,host=hostname,name=diska reads=160i,writes=70i 1554079525000000000 | ||
# | ||
# Example Output: | ||
# diskiops,host=hostname,name=diska readsps=0,writesps=0,iops=0 1554079522000000000 | ||
# diskiops,host=hostname,name=diska readsps=110,writesps=0,iops=110 1554079523000000000 | ||
# diskiops,host=hostname,name=diska readsps=0,writesps=30,iops=30 1554079524000000000 | ||
# diskiops,host=hostname,name=diska readsps=50,writesps=40,iops=90 1554079525000000000 | ||
|
||
state = { } | ||
|
||
def apply(metric): | ||
disk_name = metric.tags["name"] | ||
# Load from the shared last_state the metric for the disk name | ||
last = state.get(disk_name) | ||
# Store the deepcopy of the new metric into the shared last_state and assign it to the key "last" | ||
# NB: To store a metric into the shared last_state you have to deep copy it | ||
state[disk_name] = deepcopy(metric) | ||
if last != None: | ||
# Create the new metrics | ||
diskiops = Metric("diskiops") | ||
# Calculate reads/writes per second | ||
reads = metric.fields["reads"] - last.fields["reads"] | ||
writes = metric.fields["writes"] - last.fields["writes"] | ||
io = reads + writes | ||
interval_seconds = ( metric.time - last.time ) / 1000000000 | ||
diskiops.fields["readsps"] = ( reads / interval_seconds ) | ||
diskiops.fields["writesps"] = ( writes / interval_seconds ) | ||
diskiops.fields["iops"] = ( io / interval_seconds ) | ||
diskiops.tags["name"] = disk_name | ||
diskiops.tags["host"] = metric.tags["host"] | ||
return [diskiops] | ||
|
||
# This could be aggregated to obtain max IOPS using: | ||
# | ||
# [[aggregators.basicstats]] | ||
# namepass = ["diskiops"] | ||
# period = "60s" | ||
# drop_original = true | ||
# stats = ["max"] | ||
# | ||
# diskiops,host=hostname,name=diska readsps_max=110,writesps_max=40,iops_max=110 1554079525000000000 |