integ/emf_logger/logscript.py (26 lines of code) (raw):
import time
import sys
import os
import random
import socket
"""
This script writes a single EMF payload to the TCP socket
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Specification.html
"""
# Define constants
metricNamespace = "fluent-metrics"
metricName = 'fluent-bit-integ-test-{:d}'.format(random.randint(0, 32767))
metricValue = 100
# pass the metric-name to a file in the shared volume for validation
metricPath = os.getenv('EMF_METRIC_NAME_PATH')
file = open(metricPath, "w")
file.write(metricName)
file.close()
# EMF payload.
emfPayload = ('{{"_aws":{{"Timestamp":{:d}000,"CloudWatchMetrics":[{{"Namespace":"{:s}","Dimensions":[["dimensionKey"]]'
',"Metrics":[{{"Name":"{:s}"}}]}}]}},"dimensionKey":"dimensionValue","{:s}":{:d}}}\n').format(
int(time.time()), metricNamespace, metricName, metricName, metricValue)
dataToSend = str.encode(emfPayload)
host = os.getenv('FLUENT_CONTAINER_IP')
if not host:
# Fluent-bit container can also be resolved using the service name.
# If the IP is not explicitly set then try to resolve it using the service name.
host = "fluent-bit"
port = 5170
# Connect to the socket and write the EMF payload.
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((host, port))
s.send(dataToSend)
s.close()
time.sleep(120)
sys.exit(0)