ネット6 WebAPI -弾力性とキバナへのイントロ


この記事では、探索します.Elkスタックによるネット6

この記事で何をカバーしているの

  • は、弾性検索
  • です
  • kibana
  • とは
    弾性率を使用する理由
  • どのようにすべて一緒にフィット
  • Elk を使用する会社
  • の成分
  • コード
  • YouTubeで動画を見る
    そしてソースコードへのリンクを見つけることができます
    https://github.com/mohamadlawand087/Net6-ELK

    弾性検索とは


    FlashSearchは、分散、オープンソースの検索と解析エンジン、FlashSearchを格納、検索、およびデータの膨大なボリュームを迅速かつリアルタイムで分析することができますし、戻ってミリ秒の回答を与えることができます.
    弾性検索利用
  • あなたの方法
  • を検索します
    スケールの分析

    木花とは


    キバナは、視覚的に探索することができます視覚的なインターフェイスツールを視覚化し、ログデータの上にダッシュボードを構築します.
    kibanaのコア機能はデータの問い合わせと分析である.また、キバナの可視化機能を使用すると、代替の方法でデータを視覚化することができます
    Kibanaを使用すると、大きなデータを理解するのは簡単ですし、迅速に構築することができますし、動的なダッシュボードを共有することができます.

    なぜエラスティックサーチ


    Easyを開始するには、
  • E *:ちょうどFurticSearchとKibanaコンテナを含むファイルを構成するDockerを起動し、ログと検索を開始する準備が整いました.

  • 簡単に検索する:ElasticSearchは、Apache Luceneに基づいて内蔵フルテキスト検索エンジンを持っています.他のデータベースと比較して、Luceneは簡単に検索できます.非技術的な人々でさえ、一般的な質問を書くことができます.
  • 高速:大きなSQLデータベースのクエリを簡単に10または20秒かかることができます.大規模なエラスティックサーチデータベース上の同様のクエリに対して10ミリ秒以下で結果を返すのは一般的です.

  • 無料:まあほとんど.基本的な機能は無料、よく大部分です.キバナでのセキュリティと警告機能を必要とする場合は、Kibanaの商用X -パックのサブスクリプションを購入することができますか、いくつかのオープンソースの選択肢をインストールすることができます.
  • 全文検索エンジン
  • 分析エンジン

  • RESTful API:AntiticSearchはRESTful APIを持っています.結果はJSONで返されます.結果は結果的にうまく動作します.RESTful APIを通してデータを照会して、挿入することは、FlasticSearchで働くためにどんなプログラミング言語も使いやすいことを意味します.
  • s * calable:*それは縮尺が簡単です.それがオープンソースであるという事実と結合して、それは財布の上で簡単です.
  • エルクを使う会社

  • Netflix
  • イーベイ
  • ウォルマート
  • アドビ
  • LinkedIn
  • スタックオーバーフロー
  • コードタイム


    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を参照してください
    El
  • ELS:http://localhost:9200
  • kibana:http://localhost:5601
  • 今、我々はWebアプリケーションを作成します
    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
    
    更新appsettings.JSON
    {
      "Serilog": {
        "MinimumLevel": {
          "Default": "Information",
          "Override": {
            "Microsoft": "Information",
            "System": "Warning"
          }
        }
      },
      "ElasticConfiguration": {
        "Uri": "http://localhost:9200"
      },
      "AllowedHosts": "*"
    }
    
    プログラムを更新する必要があります.cs
    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フィールドの
  • は@ 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");
    }