Thông tin chi tiết ứng dụng thường được sử dụng để đăng nhập, nhưng bạn đã thực sự đọc tên? Mục tiêu của Insights ứng dụng là có được cái nhìn sâu sắc tốt về cách ứng dụng của bạn hoạt động.

Cách tốt nhất để có được cái nhìn tổng quan nhanh về những gì đang diễn ra với ứng dụng của bạn là lấy Bản đồ ứng dụng đẹp. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách bạn có thể định cấu hình Thông tin chi tiết về ứng dụng cho lõi dotnet 2.1, có được một cái nhìn tổng quan đẹp trong Bản đồ ứng dụng và truy vấn dữ liệu của bạn.

Thêm thông tin chi tiết ứng dụng vào lõi dotnet Thêm tài liệu tham khảo NuGet Bạn sẽ cần thêm 2 gói NuGet vào dự án của mình:

<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.7.1" />
<PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.10.0" />
Cấu hình đăng nhập Thay đổi CreatWebhostBuilder trong Program.cs của bạn để Thông tin chi tiết về ứng dụng được định cấu hình thông qua cài đặt của tệp appsinstall.json của bạn


public static IWebHostBuilder CreateWebHostBuilder(string[] args)  
{
    var webHostBuilder = WebHost.CreateDefaultBuilder(args);
    webHostBuilder.UseStartup<Startup>()
        .ConfigureLogging((hostingContext, logging) =>{
        var configSectionForLogging = hostingContext.Configuration.GetSection("Logging");
            if (!string.IsNullOrWhiteSpace(configSectionForLogging["ApplicationInsights:InstrumentationKey"]))
            {
                logging.AddApplicationInsights(configSectionForLogging["ApplicationInsights:InstrumentationKey"]?.ToString() ?? "");
                logging.AddFilter<ApplicationInsightsLoggerProvider>("", Enum.Parse<LogLevel>(configSectionForLogging["LogLevel:Default"] ?? "Information"));
                logging.AddFilter<ApplicationInsightsLoggerProvider>("Microsoft", Enum.Parse<LogLevel>(configSectionForLogging["LogLevel:Microsoft"] ?? "Warning"));
            }
    });
    return webHostBuilder;
}

Bạn có thể đặt một bộ lọc khác cho nhật ký của bạn và nhật ký microsoft. Ở đây trong ví dụ của tôi, nếu không tìm thấy loglevel, nhật ký ứng dụng sẽ mặc định là "Thông tin" và nhật ký của Microsoft sẽ mặc định là "Cảnh báo" trở lên.

Cài đặt ứng dụng Trong appsinstall.json của tôi, tôi đã thêm 2 phần trong phần ghi nhật ký chính

"Logging": {
    "ApplicationInsights": {
        "InstrumentationKey": "<your AppInsights key>",
        "RoleName": "CoreDemo_API"
    },
    "LogLevel": {
        "Default": "Information",
        "Microsoft": "Warning"
    }
}

Phần "ApplicationInsights" chứa instrumentationKey và "RoleName" thân thiện. Tên này sẽ hiển thị trong Bản đồ ứng dụng (tổng quan) về Thông tin chi tiết về ứng dụng. Theo mặc định, tên tài nguyên của ứng dụng của bạn được sử dụng. Để làm cho chế độ xem toàn cầu dễ đọc hơn, chúng tôi sẽ đặt rolename. Một ưu điểm khác của việc sử dụng RoleName là bạn có thể sử dụng nó trong các truy vấn của mình.

Phần thứ hai là "LogLevel". "Mặc định" là loglevel cho ứng dụng của chúng tôi. "Microsoft" là bộ lọc loglevel cho loggings của Microsoft.

Máy đo từ xa Tiếp theo, chúng tôi nói với ứng dụng của mình sử dụng RoleName khi đăng nhập vào AppInsights. Đây là cách Bản đồ ứng dụng của chúng tôi có được nhiều tên hữu ích hơn. Để ghi tên Rolename vào nhật ký của chúng tôi, chúng tôi sẽ cần tạo một lớp kế thừa từ ITelemetryInitializer

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;

namespace DevProtocol.CoreDemo.Api.Infrastructure
{ public class LoggingInitializer : ITelemetryInitializer { readonly string roleName; public LoggingInitializer(string roleName = null) { this.roleName = roleName ?? "api"; } public void Initialize(ITelemetry telemetry) } } Bây giờ trong Startup.cs, chúng tôi thêm lớp dưới dạng singleton và nhập RoleName

services.AddSingleton<ITelemetryInitializer>(new LoggingInitializer(Configuration["Logging:ApplicationInsights:RoleName"]));
Vì vậy, ConfigureService của bạn sẽ trông như sau:

public void ConfigureServices(IServiceCollection services) { services.AddSingleton<ITelemetryInitializer>(new LoggingInitializer(Configuration["Logging:ApplicationInsights:RoleName"])); services.AddApplicationInsightsTelemetry(options => ); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } Tránh báo cáo đăng nhập kép Microsoft đang thêm trình ghi nhật ký Thông tin chi tiết ứng dụng khi bạn bắt đầu gỡ lỗi với Visual Studio. Để tránh báo cáo ghi nhật ký kép, bạn cần phải tắt AppInsightsDebugLogger. Sau khi bạn thêm ITelemetryInitializer trong Startup.cs, bạn có thể thêm câu lệnh sau để tránh nhân đôi trong đăng nhập của mình:

services.AddApplicationInsightsTelemetry(options => ); Ghi nhật ký Từ C # 6, chúng tôi tha hồ sử dụng tính năng nội suy chuỗi. Tuyệt vời như bạn sẽ cần phải ngừng sử dụng nó cho các báo cáo đăng nhập của bạn. Vấn đề với phép nội suy chuỗi là nó làm cho mỗi customDimension là duy nhất.

Nếu bạn kiểm tra tình trạng quá tải, bạn sẽ nhận thấy rằng các phương thức ghi nhật ký có tình trạng quá tải chấp nhận danh sách đối số:

đăng nhập quá tải cho args

Vì vậy, không sử dụng:

var id = 42;
_logger.LogWarning($"Warning logging about ");
bạn nên sử dụng

var id = 42;
_logger.LogWarning("Warning logging about ", id);
Điều này cho phép bạn tìm kiếm tất cả các câu lệnh "Cảnh báo ghi nhật ký về ", đếm các câu lệnh, ...

Truy vấn dữ liệu của bạn Thông qua phân tích nhật ký, bạn có thể truy vấn dữ liệu của mình bằng KQL (Ngôn ngữ truy vấn từ khóa).

Để có được dữ liệu của chúng tôi, chúng tôi có thể sử dụng: enter image description here traces
| where cloud_RoleName == "CoreDemo_API" | where severityLevel == 2 | where customDimensions.[""] == "Warning logging about " | where timestamp > ago(1d) cloud_RoleName: RoleName mà chúng tôi đã cấu hình thông qua ITelemetryInitializer severityLevel: (0 = Truy tìm, 1 = Thông tin, 2 = Cảnh báo, 3 = Lỗi) customDimensions: tìm kiếm một tuyên bố đăng nhập cụ thể. Ở đây thật hữu ích khi bạn không sử dụng phép nội suy chuỗi trong câu lệnh log của mình dấu thời gian: ở đây chúng tôi yêu cầu dữ liệu của 24 giờ qua