我创建了一个将数据从IoT Core传输到AMP(Amazon Managed Service for Prometheus)的Lambda函数

如果能够将IoT数据放入Prometheus,并通过Grafana进行观测,我觉得会很时尚。虽然没有理由。

然而

IoT Core的规则动作中没有Prumetheus(哭)。

2022年4月3日目前可指定的操作如下。

ap-northeast-1.console.aws.amazon.com_iot_home_region=ap-northeast-1.png

如果没有的话,我决定使用Lambda云计算来创建,并且这就是我创建的。

 

组成如下。

image.png

我会把完成所需进行的各种调查结果作为日志记录下来。

Prometheus采用了拉模型

Prometheus 採用了定期從伺服器端獲取指標的拉取模型。

image.png

来源:https://prometheus.io/docs/introduction/overview/

出处:https://prometheus.io/docs/introduction/overview/

FAQ中提到了”Why do you pull rather than push?”,翻译为: “为什么你选择拉而不是推呢?”

当您进行HTTP拉取时,有几个好处。
您可以在笔记本电脑上进行监视,以便在开发更改时进行监视。
您可以更轻松地辨别目标是否已经宕机。
您可以手动访问目标并使用Web浏览器来检查目标的状态。

整体而言,我认为拉取略优于推送,但在考虑监控系统时,不应将其视为重要因素。
为了满足需要进行推送的情况,我们提供了PushGateway。

虽然提供了PushGateway,但由于需要设置服务器中继,Lambda本身无法实现。

Prometheus具备远程写入的功能。

Prometheus会通过Pull方式收集指标,同时还提供了remote write功能用于将收集到的指标转发到另一个Prometheus。

远程写入的开发经过在这里详细说明(不知何故在Grafana的博客上)。
链接:https://grafana.com/blog/2021/05/26/the-future-of-prometheus-remote-write/

image.png

文章来源:https://grafana.com/blog/2021/05/26/prometheus-remote-write的未来展望。

AWS文档中有关远程写入API的说明。

AWS提供了Prometheus的托管服务,称为Amazon Managed Service for Prometheus(简称AMP)。在AMP的文档中有关于远程写入API的描述。

 

很抱歉,Boto3目前没有实现与Prometheus兼容的API。你需要通过调用其他API来实现此功能。

再进一步,

请注意
有关请求体语法,请参阅协议缓冲定义,链接地址为:https://github.com/prometheus/prometheus/blob/1c624c58ca934f618be737b4995e22051f5724c1/prompb/remote.pb.go#L64。

什么鬼,Protocol Buffer 是什么东西,以前 AWS 的 API 不都是只发 JSON 的吗?我还不懂 Go 语言。。

首次使用的协议缓冲

在不了解Protocol Buffer是什么的情况下,经过一番调查,我得出了以下的结论,并设法实现了它。

    • protocol bufferにはスキーマ定義があり、Prometheusのスキーマ定義が先程のリンク先にあるようだ

 

    • スキーマ定義をコンパイルして使用するようだ

 

    • スキーマ定義はGo言語で書かれているが、他の言語向けにもコンパイルできるようだ

 

    ネット上にほとんど情報がないが、GitHubに1件だけ情報発見!
git clone --depth 1 https://github.com/prometheus/prometheus.git
cd prometheus/prompb
curl -L --create-dirs https://raw.githubusercontent.com/gogo/protobuf/master/gogoproto/gogo.proto -o gogoproto/gogo.proto
protoc --python_out=/workspace ./*.proto gogoproto/*.proto

以下是使用提供的模式代码。(感谢robskillington先生的贡献。)

 

需要进行SigV4认证。

因为无法使用Boto3,所以需要自己实施AWS的SigV4认证(虽然自己实施也要依赖库的支持)。

使用requests-aws4auth和botocore实现以下操作后,成功将数据remote write到AMP。

    auth = requests_aws4auth.AWS4Auth(
                refreshable_credentials=botocore.session.Session().get_credentials(),
                region=region, service=service)

    response = requests.post(endpoint, headers=headers, auth=auth, data=body)

这是一场漫长的战斗。

image.png

如果你方便的话,请随意使用。

 

顺便提一句

如果不坚持使用Prometheus,我认为可以通过IoT Core -> CloudWatch Metrics -> Grafana 的路径实现,而不需要创建Lambda。

bannerAds