ログがELK NLogの使用に直接送信される前にNLog log4netのために置き換えながら、Benpianドッカーは、カフカを構築し、ELKするために使用されます。
A.ビルカフカ
1.プルミラー
// 下载飼育係の ドッキングウィンドウプルwurstmeister / 飼育係 // 下载カフカ ドッカプルwurstmeister /カフカ:2.11 - 0.11。0.3
2. [スタート]
// 启动飼育係 ドッカ実行-d --name飼育係--publish 2181:2181 --volumeの/ etc / localtimeの:の/ etc / localtimeのwurstmeister / 飼育係 // 启动カフカ ドッカ実行-d --nameカフカ--publish 9092:9092 \ - リンク飼育係\ --env KAFKA_ZOOKEEPER_CONNECT = 192.168。3.131:2181 \ --env KAFKA_ADVERTISED_HOST_NAME = 192.168。3.131 \ --env KAFKA_ADVERTISED_PORT = 9092 \ --volumeの/ etc / localtimeの:の/ etc / localtimeの\ wurstmeister/カフカ:2.11 - 0.11。0.3
3.テストカフカ
// カフカコンテナIDチェック ドッカーPSを 容器に ドッカーExecの -it [コンテナID] binに/ bashの // トピック作成 のbin / kafka-topics.sh --create --zookeeper 192.168。3.131:2181 --replication-係数1を - -partitions 1 - トピックmykafka // ビュートピック のbin / kafka-topics.sh --list --zookeeper 192.168。3.131:2181 // 作成プロデューサーの ビン/ kafka-console-producer.sh --broker-リスト192.168。3.131:9092 - トピックmykafka //容器にクライアントを開くには 、// 作成し、消費者 のbin / kafka-console-consumer.sh --zookeeper 192.168。3.131:2181 --topic mykafka - から -beginning
再生がメッセージを送信し、消費者は成功し、それが何の問題を示していない受信終了する場合があります。
NBSP;
ELKは2 .Dockerをインストール
1 。ミラープル ドッカープルsebp / エルク 2 スタートELK。 ドッカーRUN -p 5601:5601 -p 9200:9200 -p 9300:9300 -p 5044:5044 -e -e ES_MAX_MEM ES_MIN_MEM = 128M = 2048メートル-d -エルクは、名前/ sebp エルクを // elasticsearchユーザーがメモリへのアクセス権を持っているので、起動エラーが通常であれば、少なくとも262144、小さすぎる ルートへの切り替えは、 コマンドを実行します。 sysctlの -w vm.max_map_count = 262144の ビュー結果: sysctlの -a | grepのVM .max_map_count 表示: vm.max_map_count = 262144 上記の方法の変更後は、そうだとすれば失敗する仮想マシンを再起動します 解決策を: 中に は/ etc / sysctl.confのファイルには、行の追加 vm.max_map_count = 262144を 恒久的に変更します
だから、その後数十秒、およびアクセスポート9200と5601は、ELK関連のパネルを見ることができます。
その後、我々はまた、次のlogstashを設定する必要があります。
1 。容器ヘラジカID参照 ドッカーPS 2 容器に。エルクを ドッカーエグゼクティブ /ビンコンテナID ITの迅速バッシュを 。3 。実行 は/ opt / logstash / binに/ logstash -e ' 入力STDIN {出力} {} {{=ホストGTをelasticsearch ; [ "ローカルホスト"]}} '
これはダミーエントリであり、次に、シミュレーションテスト・ログを返す:情報入力後、:正常に起動Logstash APIエンドポイント{9600ポート= GTを}コマンドが正常に実行されたとき、参照。
ブラウザを開き、次のコマンドを入力します。HTTP://:9200 / _searchプリティフィギュア、あなたは我々だけで入力されたログの内容が表示されます?。
注:複数のインスタンスを実行したい場合に設定されたデータディレクトリを使用して、すでに別のインスタンスがあるので、あなたがLogstashを開始できませんでした。このエラーメッセージが表示された場合、コマンドを実行設定「path.data」を変更する必要があります..サービスlogstash停止し、それを実行します。
NBSP;
LogstashとESユニコムの間で正常であることを示すOK、何の問題、そしてテストしない、我々はカフカからLogstash消費者のニュースを構成する必要があります。
1 設定ファイルを見つけて 、CDの/ opt / logstash / 設定 2 。設定ファイルの編集 はvi logstash.configを
入力{ カフカ{ bootstrap_servers = GT; " 192.168.3.131:9092 " ] CLIENT_ID = GT。" 試験" GROUP_ID = GT。" 試験" consumer_threads =のGT; 5 decorate_events =のGT; 真の トピック =のGT; " MI " } } フィルタ{ JSON { ソース = GT。" メッセージ" } } 出力{ elasticsearch { ホスト =のGT; [ " ローカルホスト" ] インデックス = GT。" MI - %{APP_ID} " コーデック = GT。" JSON " } }
bootstrap_servers:カフカアドレス
ここでは、サービスが別の指標であるなど、異なるESインデックスを生成するさまざまなプロジェクトに基づいて低い生産シナリオのAPP_ID効果があり、Webがあり、MQはこれを作成し、着信APP_IDで区別することができ、これらのいずれかです。
設定されたら、コンフィギュレーションをロードします。
/ opt / logstash / binに/ logstash -f /opt/logstash/config/logstash.conf
問題ありません、そして、この時間はカフカからLogstash消費データ意志、そして我々はテストに新しい.NETコアAPIプロジェクトを作成します。
NuGet NBSP参照によって1; Microsoft.Extensions.Logging.Log4Net.AspNetCore。
2.ファイル注入log4netのを起動します。
パブリック 静的 IWebHost BuildWebHost(文字列 []引数)がGTを=。 WebHost.CreateDefaultBuilder(引数)は ((ロギング).ConfigureLogging ; GTを= { // System名前空間およびMicrosoft警告レベルのコンポーネントをフィルタは、次のログの開始時に生成されます logging.AddFilter(" システム" 、LogLevel.Warning); logging.AddFilter(" マイクロソフト" 、LogLevel.Warning); logging.AddLog4Net(); }) .UseStartup LT; Startupgt; () .build();
3. log4net.configのルートに追加し、ldquoを設定し、新しいコピーrdquo場合。
LT;?xmlのバージョン= " 1.0 "エンコード= " UTF-8 " GT?。 LT; log4netgt。 LT;アペンダ名= " KafkaAppender "タイプ= " log4net.Kafka.Core.KafkaAppender、log4net.Kafka.Core " GT。 LT; KafkaSettingsgt。 LT;ブローカー値= " 192.168.3.131:9092 " / GT。 LT;トピック値= " MI " / GT。 LT; / KafkaSettingsgt。 LT;レイアウトタイプ= " log4net.Kafka.Core.KafkaLogLayout、log4net.Kafka.Core " LT; APPID値= " API-テスト" / GT。 LT; / layoutgt。 LT; / appendergt。 LT; rootgt。 LT、レベル値= " ALL " / GT。 LT; appender- REF REF = " KafkaAppender " / GT。 LT; / rootgt。 LT; / log4netgt。
トピック:ログに対応するトピック名;
のAppID:一意のサービス識別子、ログのソースを識別するのに役立ちます。
[ルート(" API / [コントローラー] " )] パブリック クラスValuesController:コントローラ { プライベート 読み取り専用ILoggerですの_logger。 公共 ValuesController(ILoggerlt; ValuesControllergt; ロガー) { _logger = ロガー。 } // GET API /値 [HTTPGET] パブリック IEnumerableltと、文字列 GT。取得() { _logger.LogInformation(" 根据のAppID最后一次カフカ测试!" ); リターン 新しい 文字列 [] { 「値1 」、「値2 」}。 } }
OK、その後、アクセスポート5601ビューを実行します。
NBSP;