.Net 6 WebAPI-ElasticSearch 및 Kibana 소개 -

본문에서 우리는 탐구할 것이다.NET 6는 ElasticSearch, Kibana, Serilog를 포함한 큰 뿔 사슴 스택

우리는 이 문장에서 무엇을 토론했다
  • 신축성 검색이 무엇인지
  • 키바나가 뭐야?
  • ElasticSearch
  • 를 사용하는 이유
  • 모든 것이 어떻게 결합되었는지
  • 큰뿔사슴을 사용하는 회사
  • 조미료
  • 코드
  • Youtube에서 전체 영상을 보실 수 있어요.
    GitHub에서 원본 코드 링크를 찾을 수 있습니다
    https://github.com/mohamadlawand087/Net6-ELK

    신축성 검색이란?
    Elasticsearch는 분포식, 소스 오픈 검색 및 분석 엔진입니다. Elasticsearch는 대량의 데이터를 신속하고 실시간으로 저장하고 검색하며 분석하며 밀리초 안에 답을 되돌려줍니다.
    유연한 검색 활용도
  • 너의 길을 찾아
  • 비례 분석

  • 키바나
    Kibana는 Elasticsearch 그룹에 모인 로그 데이터를 탐색하고 시각화하며 계기판을 구축할 수 있는 시각화된 인터페이스 도구입니다.
    키바나의 핵심 기능은 데이터 조회와 분석이다.또한 Kibana의 시각화 기능은 다른 방식으로 데이터를 시각화할 수 있도록 합니다
    키바나가 있으면 빅데이터는 쉽게 이해할 수 있고 동적 계기판을 신속하게 구축하고 공유하여 Elasticsearch 조회의 변화를 실시간으로 나타낼 수 있다.

    ElasticSearch를 사용해야 하는 이유
  • E*easy to get start*: Elastic Search와 Kibana 용기를 포함하는 docker compose 파일을 시작하면 기록과 검색을 시작할 수 있습니다.

  • 간편한 검색: ElasticSearch에는 Apache Lucene 기반의 내장된 전문 검색 엔진이 있습니다.Lucene은 다른 데이터베이스에 비해 조회가 용이합니다.비기술자라도 흔히 볼 수 있는 조회를 작성할 수 있다.
  • 빠르기: 대형 SQL 데이터베이스를 조회하는 데 10초나 20초가 걸리기 쉽다.대형 ElasticSearch 데이터베이스에 있는 유사한 조회는 10밀리초 안에 결과를 되돌려 주는 것이 흔하다.

  • 공짜: 얼마 안 남았어요.기본 기능은 기본적으로 무료입니다.만약에 키바나의 안전과 경보 기능이 필요하다면 키바나의 비즈니스 X-pack 구독을 구매하거나 소스 오픈 대안을 설치할 수 있습니다.
  • 전문 검색엔진
  • 분석 엔진

  • RESTful API: ElasticSearch에는 RESTful API가 있습니다.질의 결과가 JSON 형식으로 반환되므로 결과가 쉽게 처리됩니다.RESTful API를 통해 데이터를 조회하고 삽입하면 모든 프로그래밍 언어를 사용하여 ElasticSearch를 쉽게 처리할 수 있습니다.
  • S* 배율 조정: * 확장이 용이합니다.게다가 지갑도 쉽다는 뜻이다.

  • 큰 뿔 사슴을 사용하는 회사
  • Netflix
  • 이노베이션
  • 월마트
  • Adobe
  • 영영
  • 스택 오버플로우

  • 인코딩 시간
    docker 파일을 만듭니다
    version: '3.1'
    
    services:
      elasticsearch:
        container_name: els
        image: docker.elastic.co/elasticsearch/elasticsearch:7.16.1
        ports:
          - 9200:9200
        volumes:
          - elasticsearch-data:/usr/share/elasticsearch/data
        environment:
          - xpack.monitoring.enabled=true
          - xpack.watcher.enabled=false
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - discovery.type=single-node
        networks:
          - elastic
    
      kibana:
        container_name: kibana
        image: docker.elastic.co/kibana/kibana:7.16.1
        ports:
          - 5601:5601
        depends_on:
          - els
        environment:
          - ELASTICSEARCH_URL=http://localhost:9200
        networks:
          - elastic
    
    networks:
      elastic:
        driver: bridge
    
    volumes:
      elasticsearch-data:
    
    명령을 집행하다
    docker-compose up -d
    
    실행 중인지 확인하려면 다음 URL을 방문하십시오
  • ELS:http://localhost:9200
  • 키바나: http://localhost:5601
    현재 웹 응용 프로그램을 만듭니다
    dotnet new webapi --no-https -n DotnetELK
    
    패키지 설치
    dotnet add package Serilog.AspNetCore
    dotnet add package Serilog.Enrichers.Environment
    dotnet add package Serilog.Sinks.Debug
    dotnet add package Serilog.Sinks.Elasticsearch
    dotnet add package Serilog.Exceptions
    dotnet restore
    
    응용 프로그램 설정을 업데이트합니다.json
    {
      "Serilog": {
        "MinimumLevel": {
          "Default": "Information",
          "Override": {
            "Microsoft": "Information",
            "System": "Warning"
          }
        }
      },
      "ElasticConfiguration": {
        "Uri": "http://localhost:9200"
      },
      "AllowedHosts": "*"
    }
    
    우리는 우리의 프로그램을 업데이트해야 한다.대테러 엘리트
    using System.Reflection;
    using Serilog;
    using Serilog.Sinks.Elasticsearch;
    
    var builder = WebApplication.CreateBuilder(args);
    
    ConfigureLogging();
    builder.Host.UseSerilog();
    
    // Add services to the container.
    builder.Services.AddControllersWithViews();
    
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Home/Error");
    }
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.UseAuthorization();
    
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    
    app.Run();
    
    void ConfigureLogging()
    {
        var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
        var configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile(
                $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
                optional: true)
            .Build();
    
        Log.Logger = new LoggerConfiguration()
            .Enrich.FromLogContext()
            .Enrich.WithExceptionDetails()
            .WriteTo.Debug()
            .WriteTo.Console()
            .WriteTo.Elasticsearch(ConfigureElasticSink(configuration, environment))
            .Enrich.WithProperty("Environment", environment)
            .ReadFrom.Configuration(configuration)
            .CreateLogger();
    }
    
    ElasticsearchSinkOptions ConfigureElasticSink(IConfigurationRoot configuration, string environment)
    {
        return new ElasticsearchSinkOptions(new Uri(configuration["ElasticConfiguration:Uri"]))
        {
            AutoRegisterTemplate = true,
            IndexFormat = $"{Assembly.GetExecutingAssembly().GetName().Name.ToLower().Replace(".", "-")}-{environment?.ToLower().Replace(".", "-")}-{DateTime.UtcNow:yyyy-MM}"
        };
    }
    
    지금 저희가 프로그램을 실행하고 있어요.
    dotnet run
    
    통합 추가
  • 클릭 메뉴
  • 분석에서 검색 클릭
  • 색인 생성 모드
  • 명칭 유형:dotnetelk-*
  • 타임 스탬프 필드에서 @timestamp
  • 선택
  • 클릭하여 색인 만들기 모드
  • 이제 디스커버리로 돌아가면 지금까지의 모든 로그를 볼 수 있습니다
  • 이제 컨트롤러에서 다음 내용을 업데이트할 사용자 정의 메시지를 만듭니다
    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        _logger.LogInformation("WeatherForecastController Get - this is a nice message to test the logs", DateTime.UtcNow);
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
    
    현재 우리는 검색 상자에 다음과 같은 내용을 입력해서 그것을 검색할 수 있다
    message: "WeatherForecastController Get"
    
    이제 컨트롤러 내부에서 오류를 테스트하도록 하겠습니다.
    try
    {
        throw new Exception("Testing exceptions - ML");
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "An unknown error occurred on the Index action of the HomeController");
    }
    

    좋은 웹페이지 즐겨찾기