Azure功能自定义ILogger

时间:2018-03-10 15:04:00

标签: azure azure-functions azure-webjobs azure-application-insights

希望有些人比我更了解Azure功能可以提供帮助。

开箱即用,您可以使用应用设置中的APPINSIGHTS_INSTRUMENTATIONKEY设置登录Application Insights ...这将在基本级别记录功能请求,然后允许您执行.py

只需使用TraceWriter或ILogger即可。

问题是,我不想将Key存储在我的配置中,我想将它存储在KeyVault中,以及App的所有其他键。我还想做一些其他自定义日志记录,因此根据此链接:https://docs.microsoft.com/en-us/azure/azure-functions/functions-monitoring#custom-telemetry-in-c-functions 我们可以实现一个自定义.exe对象来从KeyVault中读取而不会有太多麻烦......

但是,使用ILogger获得的所有免费日志记录现已消失,所以我想我需要做的是以某种方式将Application Insights ILogger注入我的函数...

有人可以帮助我理解这里的限制,就像它可能会如何 一样。我还假设必须有一个GitHub开放案例,我会热衷于它找到并放重,因为我无法想象我是唯一一个面对这一点的人。

1 个答案:

答案 0 :(得分:0)

  

问题是,我不想将密钥存储在我的配置中,我想将其存储在KeyVault中,以及该应用程序的所有其他密钥。

我们可以将 APPINSIGHTS_INSTRUMENTATIONKEY 存储在密钥保管库中。我建议您使用Azure MSI函数。

我也为它做了一个演示。以下是我的详细步骤。

1.创建一个azure功能应用程序并从azure portal

启用MSI

enter image description here

2.创建Application Insight应用程序并复制INSTRUMENTATIONKEY值。

enter image description here

3.使用复制的INSTRUMENTATIONKEY vaule创建一个秘密。

enter image description here

4.如果想从Azure应用程序中获取秘密,我们需要添加访问策略

enter image description here

5.使用VS创建一个httptrigger函数并添加以下演示代码。

CREATE TABLE SystemEvents
(
    [TimeStamp] datetime
)
GO

CREATE INDEX IX_SystemEvents_TimeStamp
ON dbo.SystemEvents(TimeStamp)

CREATE TABLE SystemEventsTotalCount
(
    TotalCount int NOT NULL
)
GO

INSERT INTO SystemEventsTotalCount VALUES ((SELECT COUNT(*) FROM SystemEvents))
GO

CREATE TRIGGER SystemEvents_TotalCount
ON SystemEvents
FOR INSERT, DELETE
AS
    DECLARE @InsertedRows int = (SELECT COUNT(*) FROM inserted);
    DECLARE @DeletedRows int = (SELECT COUNT(*) FROM deleted);
    UPDATE SystemEventsTotalCount
    SET TotalCount = TotalCount + @InsertedRows - @DeletedRows
GO
GO
CREATE VIEW EventCounts
AS
WITH b AS
(
    SELECT 
        SUM(CASE WHEN r.Timestamp > DATEADD(MINUTE, -15, GETDATE()) AND r.Timestamp <= GETDATE() THEN 1 ELSE 0 END) AS Last15MinEventCount,
        SUM(CASE WHEN r.Timestamp > DATEADD(MINUTE, -30, GETDATE()) AND r.Timestamp <= DATEADD(MINUTE, -15, GETDATE()) THEN 1 ELSE 0 END) AS From15To30EventCount,
        SUM(CASE WHEN r.Timestamp > DATEADD(MINUTE, -60, GETDATE()) AND r.Timestamp <= DATEADD(MINUTE, -30, GETDATE()) THEN 1 ELSE 0 END) AS From30to60EventCount,
        (SELECT TotalCount FROM dbo.SystemEventsTotalCount) AS TotalEventCount
    FROM 
        dbo.SystemEvents r
    WHERE
        r.Timestamp > DATEADD(MINUTE, -60, GETDATE())
)
SELECT
    b.Last15MinEventCount, b.From15To30EventCount, b.From30to60EventCount,
    (b.TotalEventCount - b.Last15MinEventCount - b.From15To30EventCount - b.From30to60EventCount) AS OlderThan60EventCount

FROM b
GO

SELECT * FROM EventCounts

6.将项目发布到azure,并从azure

进行测试

enter image description here

7.从Application Insight中查看。

enter image description here