- 최신
- 최다 투표
- 가장 많은 댓글
Hi. You can use fleet indexing and SearchIndex. The query is connectivity.connected:true
: https://docs.aws.amazon.com/iot/latest/developerguide/example-queries.html. These queries can be done on the console, with the CLI, or with Fleet Hub.
You can also use fleet metrics to get aggregates such as the count of connected devices: https://docs.aws.amazon.com/iot/latest/developerguide/index-aggregate.html. You can monitor the fleet metrics in CloudWatch.
I did this the way one of the commenters above, Eddy, suggested. To explain that a little more, what I did was to write a short lambda attached to the presence lifecycle:
SELECT * FROM '$aws/events/presence/#'
In my case, the lambda writes a record to timestream. You could write it somewhere else, like dynamodb, I benefit from having a log. This works for me because I don't have that many disconnect/reconnects so the timestream cost is negligible - YMMV.
I won't paste the entire lambda here (unless you want me to) but this is the general outline:
function handleConnectionChanged(status: LifecycleMessage, context: Context): Promise<boolean> {
/* junk deleted */
const values: MeasureValue[] = [
{Name: "session", Value: status.sessionIdentifier, Type: MeasureValueType.VARCHAR}
];
if (status.eventType?.length) {
values.push({Name: "event", Value: status.eventType, Type: MeasureValueType.VARCHAR})
}
if (status.ipAddress?.length) {
values.push({Name: "ip", Value: status.ipAddress, Type: MeasureValueType.VARCHAR})
}
const writeRecord: WriteRecordsRequest = {
DatabaseName: "my-iot-db",
TableName: "my-tracking-table",
CommonAttributes: {
Time: status.timestamp.toString(),
TimeUnit: TimeUnit.MILLISECONDS
},
Records: [
{
Dimensions: [
{"Name": "clientId", "Value": status.clientId, DimensionValueType: DimensionValueType.VARCHAR},
{"Name": "principal", "Value": status.principalIdentifier, DimensionValueType: DimensionValueType.VARCHAR}
],
MeasureName: "state",
MeasureValueType: MeasureValueType.MULTI,
MeasureValues: values
}
]
}
/* write the record */
}
Nice one wz2b! There's also this sample: https://github.com/aws-samples/connectivity-management-example-for-aws-iot-core
관련 콘텐츠
- 질문됨 3일 전
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 3년 전
Thank you!!
No worries. The best way to thank me is to Accept the answer. :-)
Yes, you can use fleet indexing, but it's not real-time. I prefer to catch "$aws/events/presence/connected/clientId" and "$aws/events/presence/disconnected/clientId" events and save it on DynamoDB