我有一个Azure逻辑应用程序,可以正确创建一个Azure容器实例。容器启动,执行其工作并终止。我需要使用适当的连接器收集其日志,然后将其写入到天蓝色的Blob中。
我已经准备就绪,但是我不知道如何使用“获取容器的日志”连接器收集日志之前如何等待容器终止。
如果容器作业将持续可预测的时间,我可以在获取日志之前使用Delay连接器,这样就足够了(我已经尝试过简短的作业,并且效果很好)。 但是我的工作可能会持续几个小时,具体取决于某些外部因素,因此“延迟”技术不起作用。
我尝试使用“直到”连接器,延迟和“获取容器组的属性”容器来等待,直到容器的状态未被“终止”,但是没有成功(也许我做到了)错误)。无论如何,这可能会非常昂贵,因为每张“支票”都需要开票。
我如何等待容器终止后再询问其日志?
谢谢。
答案 0 :(得分:1)
如果要获取容器组的日志,但没人知道它何时可以终止。在逻辑应用程序中,您可以使用变量来存储容器组的状态,然后使用直到控件循环,该循环将获取容器组的终止直到实现。
以下是步骤:
整个结构:
Initialize变量和直到步骤:
答案 1 :(得分:0)
由于您提到在逻辑应用程序中使用“直到”可能很昂贵,因此在此我提供另一种解决方案供您参考。
我们可以创建一个time trigger azure function并每隔1分钟设置一次cron表达式,create a service plan(free tier)则用于该函数,因此我们无需为该函数的运行成本付费(但可以为此付费)功能的存储)。
该功能每1分钟运行一次。在函数中,我们需要使用this rest api获取容器的属性,然后如果状态为“终止”,则调用逻辑应用程序请求以触发逻辑应用程序(逻辑应用程序应创建为“ { {3}}”)。
功能代码(在本地,部署到天蓝色之前)应如下所示:
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
}
}
}
希望对您的问题有帮助〜
答案 2 :(得分:0)
这使用“状态”容器实例变量而不是“设置状态”。后者与容器组的创建有关,第一个与容器实例的状态有关,这正是我所需要的。 我增加了一个延迟,以减少连接器的(收费)运行次数。
答案 3 :(得分:-1)
一旦容器终止,一切都会丢失。您可以从Azure市场安装log-analytics-containers进行日志记录,并在容器终止之前记录日志