azure 逻辑应用程序:等待 ACI 容器终止以获取其日志
azure logic apps: waiting for an ACI container to terminate to get its logs
我有一个可以正确创建 Azure 容器实例的 Azure 逻辑应用程序。容器启动,完成它的工作并终止。我需要使用适当的连接器收集它的日志并将它们写入 azure blob。
我已经准备好所有的部分,但我不知道如何等待容器终止才能使用 "get logs of container" 连接器收集日志。
如果容器作业将持续可预测的时间量,我可以在获取日志之前使用延迟连接器,这就足够了(我已经尝试过短期作业并且效果很好)。
但是我的工作可能会持续几个小时,这取决于一些外部因素,所以延迟技术不起作用。
我已经尝试使用 "Until" 连接器,连同延迟和 "get properties of a container group" 容器一起等待,直到容器的状态不是 "terminated",但没有成功(也许我做错了)。无论如何,这可能会非常昂贵,因为每个 "check" 都要收费。
如何在请求其日志之前等待容器终止?
谢谢。
一旦容器终止,一切都将丢失。您可以从 Azure 市场安装 log-analytics-containers 进行日志记录,并在容器终止前记录日志
如果你想获取一个容器组的日志,但没人知道它什么时候可以终止。在逻辑应用程序中,您可以使用一个变量来存储容器组的状态,然后使用一个 until 控制循环,该循环将终止容器组,直到它变为真。
步骤如下:
- 创建容器组;
- 获取容器组的配置状态;
- 初始化一个变量来存储容器组的提供状态;
- untile中,获取容器组的提供状态,直到状态等于终止;
- 获取容器组的日志。
整个结构:
Initialize 变量和 Until 步骤:
既然你提到在逻辑应用中使用"Until"可能会很昂贵,我在这里提供另一种解决方案供你参考。
我们可以为函数创建一个time trigger azure function and set the cron expression every 1 minutes, create a service plan(free tier),所以我们不需要支付函数的运行ning成本(但可能会支付函数的存储费用)。
该函数将 运行 每 1 分钟。在函数中我们需要通过this rest api and then if the state is "terminated", call the logic app request to trigger the logic app(the logic app should be created as "When a HTTP request is received").
获取容器的属性
功能代码(在本地,部署到azure之前)应该如下:
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace hurytimeFun
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
//1. using rest api to get the properties of your container
//2. if the state is "terminated"
// call the logic app request to trigger the logic app
}
}
}
希望对您的问题有所帮助~
从Charles Xu的回答开始,设置变量的正确顺序是
这使用 "state" 容器实例变量而不是 "provisioning state"。后者是关于容器组的创建,第一个是关于容器实例的状态,这是我需要的。
我添加了延迟以减少连接器的(付费)运行次数。
我有一个可以正确创建 Azure 容器实例的 Azure 逻辑应用程序。容器启动,完成它的工作并终止。我需要使用适当的连接器收集它的日志并将它们写入 azure blob。
我已经准备好所有的部分,但我不知道如何等待容器终止才能使用 "get logs of container" 连接器收集日志。
如果容器作业将持续可预测的时间量,我可以在获取日志之前使用延迟连接器,这就足够了(我已经尝试过短期作业并且效果很好)。 但是我的工作可能会持续几个小时,这取决于一些外部因素,所以延迟技术不起作用。
我已经尝试使用 "Until" 连接器,连同延迟和 "get properties of a container group" 容器一起等待,直到容器的状态不是 "terminated",但没有成功(也许我做错了)。无论如何,这可能会非常昂贵,因为每个 "check" 都要收费。
如何在请求其日志之前等待容器终止?
谢谢。
一旦容器终止,一切都将丢失。您可以从 Azure 市场安装 log-analytics-containers 进行日志记录,并在容器终止前记录日志
如果你想获取一个容器组的日志,但没人知道它什么时候可以终止。在逻辑应用程序中,您可以使用一个变量来存储容器组的状态,然后使用一个 until 控制循环,该循环将终止容器组,直到它变为真。
步骤如下:
- 创建容器组;
- 获取容器组的配置状态;
- 初始化一个变量来存储容器组的提供状态;
- untile中,获取容器组的提供状态,直到状态等于终止;
- 获取容器组的日志。
整个结构:
Initialize 变量和 Until 步骤:
既然你提到在逻辑应用中使用"Until"可能会很昂贵,我在这里提供另一种解决方案供你参考。
我们可以为函数创建一个time trigger azure function and set the cron expression every 1 minutes, create a service plan(free tier),所以我们不需要支付函数的运行ning成本(但可能会支付函数的存储费用)。
该函数将 运行 每 1 分钟。在函数中我们需要通过this rest api and then if the state is "terminated", call the logic app request to trigger the logic app(the logic app should be created as "When a HTTP request is received").
获取容器的属性功能代码(在本地,部署到azure之前)应该如下:
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace hurytimeFun
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
//1. using rest api to get the properties of your container
//2. if the state is "terminated"
// call the logic app request to trigger the logic app
}
}
}
希望对您的问题有所帮助~
从Charles Xu的回答开始,设置变量的正确顺序是
这使用 "state" 容器实例变量而不是 "provisioning state"。后者是关于容器组的创建,第一个是关于容器实例的状态,这是我需要的。 我添加了延迟以减少连接器的(付费)运行次数。