天蓝色的逻辑应用程序:等待ACI容器终止以获取其日志

时间:2019-12-24 09:37:24

标签: azure docker azure-logic-apps azure-container-instances

我有一个Azure逻辑应用程序,可以正确创建一个Azure容器实例。容器启动,执行其工作并终止。我需要使用适当的连接器收集其日志,然后将其写入到天蓝色的Blob中。

我已经准备就绪,但是我不知道如何使用“获取容器的日志”连接器收集日志之前如何等待容器终止。

如果容器作业将持续可预测的时间,我可以在获取日志之前使用Delay连接器,这样就足够了(我已经尝试过简短的作业,并且效果很好)。 但是我的工作可能会持续几个小时,具体取决于某些外部因素,因此“延迟”技术不起作用。

我尝试使用“直到”连接器,延迟和“获取容器组的属性”容器来等待,直到容器的状态未被“终止”,但是没有成功(也许我做到了)错误)。无论如何,这可能会非常昂贵,因为每张“支票”都需要开票。

我如何等待容器终止后再询问其日志?

谢谢。

4 个答案:

答案 0 :(得分:1)

如果要获取容器组的日志,但没人知道它何时可以终止。在逻辑应用程序中,您可以使用变量来存储容器组的状态,然后使用直到控件循环,该循环将获取容器组的终止直到实现。

以下是步骤:

  1. 创建一个容器组;
  2. 获取容器组的供应状态; <​​/ li>
  3. 初始化变量以存储容器组的供应状态; <​​/ li>
  4. 在字段中,获取容器组的提供状态,直到该状态等于终止;
  5. 获取容器组的日志。

整个结构:

enter image description here

Initialize变量和直到步骤:

enter image description here

答案 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)

从Charles Xu的答案开始,设置变量时的正确顺序是 enter image description here

这使用“状态”容器实例变量而不是“设置状态”。后者与容器组的创建有关,第一个与容器实例的状态有关,这正是我所需要的。 我增加了一个延迟,以减少连接器的(收费)运行次数。

答案 3 :(得分:-1)

一旦容器终止,一切都会丢失。您可以从Azure市场安装log-analytics-containers进行日志记录,并在容器终止之前记录日志