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

azure逻辑应用程序:等待ACI容器终止以获取其日志,azure,docker,azure-logic-apps,azure-container-instances,Azure,Docker,Azure Logic Apps,Azure Container Instances,我有一个Azure逻辑应用程序,可以正确创建Azure容器实例。容器启动、执行其工作并终止。我需要使用适当的连接器收集日志,并将它们写入azure blob 我已经准备好了所有的部分,但是我不知道如何在使用“GetLogsofContainer”连接器收集日志之前等待容器终止 如果容器作业将持续一段可预测的时间,我可以在获取日志之前使用延迟连接器,这就足够了(我尝试过短作业,它工作得很好)。 但是我的工作可能会持续几个小时,这取决于一些外部因素,所以延迟技术不起作用 我尝试使用“直到”连接器,以

我有一个Azure逻辑应用程序,可以正确创建Azure容器实例。容器启动、执行其工作并终止。我需要使用适当的连接器收集日志,并将它们写入azure blob

我已经准备好了所有的部分,但是我不知道如何在使用“GetLogsofContainer”连接器收集日志之前等待容器终止

如果容器作业将持续一段可预测的时间,我可以在获取日志之前使用延迟连接器,这就足够了(我尝试过短作业,它工作得很好)。 但是我的工作可能会持续几个小时,这取决于一些外部因素,所以延迟技术不起作用

我尝试使用“直到”连接器,以及延迟和“获取容器组的属性”容器来等待容器的状态不是“终止”,但没有成功(可能是我做错了)。无论如何,这可能是相当昂贵的,因为每一张“支票”都是收费的

在请求容器日志之前,如何等待容器终止


谢谢。

一旦容器终止,所有东西都会丢失。如果您想要获取容器组的日志,并且没有人知道它何时可以终止,那么您可以从Azure marketplace安装日志分析容器,以便在容器终止之前进行日志记录。在logic应用程序中,您可以使用一个变量来存储容器组的状态,然后使用一个直到控制循环,该循环将获得容器组的终止,直到它实现为止

以下是步骤:

  • 创建容器组
  • 获取容器组的供应状态
  • 初始化变量以存储容器组的供应状态
  • 在untile中,获取容器组的供应状态,直到该状态等于terminate
  • 获取容器组的日志
  • 整个结构:

    初始化变量并执行以下步骤:

    既然您提到在logic应用程序中使用“直到”可能会很昂贵,我在这里提供另一个解决方案供您参考

    我们可以为函数每1分钟创建一个cron表达式并设置一次cron表达式,因此我们不需要支付函数的运行成本(但可以支付函数的存储成本)

    该功能将每1分钟运行一次。在函数中,我们需要使用RESTAPI获取容器的属性,然后如果状态为“终止”,则调用logic app请求以触发logic app(logic app应创建为“”)

    功能代码(在本地,部署到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”。后者是关于容器组的创建,第一个是关于容器实例的状态,这正是我所需要的。
    我添加了延迟以减少连接器的(付费)运行次数。

    当容器终止时,不会丢失任何东西:例如,如果不删除容器组,您可以轻松读取其日志。这是一个很好的起点,尽管不完全符合我的目的。详情请参阅我的答案。谢谢。这个方法通常是很酷和有效的,但是对于我来说它不适用,因为我有许多逻辑应用程序是通过编程配置的,你的答案需要额外的协调工作。谢谢。为什么不接受我的答案而不是复制解决方案,因为它可以帮助你解决问题?!因为它是不完整的,不能正常工作。如果您编辑它并使其按预期工作,例如使用正确的参数(state)和必需的foreach,我将非常乐意接受您的答案。只有一个完整的答案肯定会对社区更有用,这是至关重要的。谢谢。为什么不起作用?如果您只创建一个实例,那么它将运行良好。我不知道你真正想要的所有信息,除了你没有人会知道。因此,社区只能提供一个解决问题的想法,而不能提供完整的答案。很抱歉@CharlesXu,但这正是我所需要的:“我不知道如何等待容器终止”。您有用的答案告诉我们何时正确部署了容器,而不是何时终止其执行。事实上,您查询的是“provisioningState”属性,而不是“state”属性。第一个保持供应状态,后一个保持执行状态。