gpt4 book ai didi

azure - Azure 容器实例成功/失败时发送电子邮件警报/日志

转载 作者:行者123 更新时间:2023-12-03 02:45:09 25 4
gpt4 key购买 nike

是否有任何方法可以在单个 Azure 容器实例成功或失败(或基本上更改状态)时设置电子邮件警报?我有一些定期启动的一次性容器,并且希望在它们完成时收到通知以及完成的状态。如果电子邮件还可以包含来自容器的日志,那就更好了。使用内置警报可以做到这一点吗?

到目前为止,我还无法使其与提供的信号一起工作。

最佳答案

不相信有一种自动方法,所以我所做的是创建一个基于计时器的小型函数,该函数每 5 分钟运行一次,获取所有容器的列表并检查状态。如果有任何一个处于失败状态,则它会使用 SendGrid 发送警报电子邮件。

丹的更新

我在函数中使用托管服务标识,因此我有一个如下所示的容器任务类,不记得我在哪里获得了生成 GetAzure 函数的帮助,显然在进行本地调试时,您无法使用 MSI凭据和 Visual Studio 上本应起作用的本地帐户似乎不起作用。不过我认为它可能就在这里 - https://github.com/Azure/azure-sdk-for-net/issues/4968

public static class ContainerTasks
{
private static readonly IAzure azure = GetAzure();

private static IAzure GetAzure()
{
var tenantId = Environment.GetEnvironmentVariable("DevLocalDbgTenantId");
var clientId = Environment.GetEnvironmentVariable("DevLocalDbgClientId");
var clientSecret = Environment.GetEnvironmentVariable("DevLocalDbgClientSecret");
AzureCredentials credentials;

if (!string.IsNullOrEmpty(tenantId) &&
!string.IsNullOrEmpty(clientId) &&
!string.IsNullOrEmpty(clientSecret))
{
var sp = new ServicePrincipalLoginInformation
{
ClientId = clientId,
ClientSecret = clientSecret
};
credentials = new AzureCredentials(sp, tenantId, AzureEnvironment.AzureGlobalCloud);
}
else
{
credentials = SdkContext
.AzureCredentialsFactory
.FromMSI(new MSILoginInformation(MSIResourceType.AppService), AzureEnvironment.AzureGlobalCloud);
}
var authenticatedAzure = Azure
.Configure()
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
.Authenticate(credentials);
var subscriptionId = Environment.GetEnvironmentVariable("DevLocalDbgSubscriptionId");
if (!string.IsNullOrEmpty(subscriptionId))
return authenticatedAzure.WithSubscription(subscriptionId);
return authenticatedAzure.WithDefaultSubscription();
}

public static IEnumerable<IContainerGroup> ListTaskContainers(string resourceGroupName, ILogger log)
{
log.LogInformation($"Getting a list of all container groups in Resource Group '{resourceGroupName}'");

return azure.ContainerGroups.ListByResourceGroup(resourceGroupName);
}
}

那么我的监听功能就简单了

public static class MonitorACIs
{
[FunctionName("MonitorACIs")]
public static void Run([TimerTrigger("%TimerSchedule%")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"MonitorACIs Timer trigger function executed at: {DateTime.Now}");
foreach(var containerGroup in ContainerTasks.ListTaskContainers(Environment.GetEnvironmentVariable("ResourceGroupName"), log))
{
if(String.Equals(containerGroup.State, "Failed"))
{
log.LogInformation($"Container Group {containerGroup.Name} has failed please investigate");
Notifications.FailedTaskACI(containerGroup.Name, log);
}
}
}
}

Notifications.FailedTaskACI 只是一种向我们的团队 channel 之一发送电子邮件的类方法

它并不完美,但目前已经可以完成工作了!

关于azure - Azure 容器实例成功/失败时发送电子邮件警报/日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59218750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com