懶人必備:.NetCore快速搭建ELK分散式日誌中心

来源:https://www.cnblogs.com/ShaoJianan/archive/2019/09/03/11455250.html
-Advertisement-
Play Games

它是一個分散式日誌解決方案,是Logstash、Elastaicsearch、Kibana的縮寫,可用於從不同的服務中收集日誌後進行處理和分析,通過Kibana可以全方面的展示收集後的信息,比如通過圖表或者表格形式 ...


該篇內容由個人博客點擊跳轉同步更新!轉載請註明出處!

前言

ELK是什麼

它是一個分散式日誌解決方案,是Logstash、Elastaicsearch、Kibana的縮寫,可用於從不同的服務中收集日誌後進行處理和分析,通過Kibana可以全方面的展示收集後的信息,比如通過圖表或者表格形式。

能用來做什麼

(一)ELK組件在海量日誌系統的運維中,可用於解決:

  • 分散式日誌數據集中式查詢和管理
  • 系統監控,包含系統硬體和應用各個組件的監控
  • 故障排查
  • 安全信息和事件管理
  • 報表功能
    (二)ELK組件在大數據運維繫統中,主要可解決的問題如下:
  • 日誌查詢,問題排查,上線檢查
  • 伺服器監控,應用監控,錯誤報警,Bug管理
  • 性能分析,用戶行為分析,安全漏洞分析,時間管理

    安裝前準備

    我的系統環境是CentOS Linux release 7.6.1810 (Core)
  1. 安裝GIT(用於下載下文提到的GITHUB項目,你也可以用curl,但項目更新比較快用GIT方便更新)
  2. 安裝Docker(下麵項目將部署到Docker中)
  3. 安裝Docker-Compose(文章會用DC進行服務構建)
    好了,萬事具備,只欠東風。

    懶人安裝

    ELK的安裝比較繁瑣,網上的教程也基本都是一個個下載之後再進行安裝和配置。逛了一圈gayhub找到了docker安裝部署的懶人方式這是項目地址
    首先在你的根目錄新建一個文件夾就叫elk,然後通過GIT命令下載項目到該目錄下,進入到該目錄下你可以看到這樣的目錄結構
[root@localhost docker-elk]# ls
docker-compose.yml  docker-stack.yml  elasticsearch  extensions  filebeat  kibana  LICENSE  logstash  README.md

運行命令進行服務構建,記住一定要加個d,不然退出終端服務就停了,這個過程有點漫長,畢竟裝的東西有點多

[root@localhost docker-elk]# docker-compose up -d

裝完後他會預設打開以下這些埠
5000: Logstash TCP input(Logstash數據的接收通道)
9200: Elasticsearch HTTP(ES的http通道)
9300: Elasticsearch TCP transport(ES的TCP通道)
5601: Kibana(UI管理界面)
這幾個服務對應的關係如下圖,應用程式將日誌推送給Logstash,然後放到ES進行存儲,最後通過Kibana進行數據展示
服務關係
當然了logstash也有很多對應的插件beats用來收集不同的日誌,在高併發的情況下你也可以通過使用redis或者kafka作為中間件進行過渡,就像下麵的架構圖一樣
複雜一點
在安裝完成後我們用瀏覽器打開下麵兩個地址,這裡會提示你輸入用戶名和密碼:
user: elastic
password: changeme
這是預設的稍後和大家說下如何修改密碼

  1. http://127.0.0.1:9200/ 打開可以看到ES的一些版本信息等
    ES信息
  2. http://127.0.0.1:5601/ 打開後就是Kibana的界面,如果ES沒有啟動完成的話會提示你未找到ES數據源
    kibana界面
    好了,安裝運行已經全部結束,是不是非常簡單,比起網上那些長篇大論講安裝的,這裡其實就兩步:下載和運行dc文件

    .NetCore使用Nlog進行日誌收集

    首先在你的項目中用Nuget安裝以下兩個類庫
    NLog.Extensions.Logging和NLog.Web.AspNetCore
    然後新建NLog的配置文件Nlog.config,內容如下 :
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Warn"
      internalLogFile="internal-nlog.txt">

  <extensions>
    <add  assembly="NLog.Web.AspNetCore"/>
  </extensions >
  <variable name="logDirectory" value="${basedir}\logs\"/>
  <!--define various log targets-->
  <targets>
    <!--write logs to file-->
    <!--address 填寫Logstash數據的接收通道-->
    <target xsi:type="Network"
            name="elastic"
            keepConnection="false"
            address ="tcp://127.0.0.1:5000"
            layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
    />
    <target xsi:type="Null" name="blackhole" />
  </targets>
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />
    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Trace" writeTo="elastic" />
  </rules>
</nlog>

然後在Startup>Configure中引入Nlog

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
       LogManager.LoadConfiguration("Nlog.config");//引入配置文件
       loggerFactory.AddNLog();//註入Nlog
}

接下來在自己項目是進行一個簡單的測試

Logger log = NLog.LogManager.GetCurrentClassLogger();
log.Debug("測試日誌內容");

Kibana中配置對剛纔的日誌進行分析

Kibana必須要先有數據後才能對數據進行展示,所以我們必須要有上面的測試數據,然後配置索引進行數據查看
登錄進來後左邊隨機點一個菜單來到如下界面
界面
點擊Create index pattern來到如下界面,這裡就是配置你要展現ES中哪個索引下的內容,這裡nci-bids-log-2019xxx這是logstash生成的,你們的可能叫logstash-2019xxxx,我的索引在配置中被我重命名了一下方便區分項目
配置索引
通過名稱來進行模糊匹配,匹配規則貌似就是正則,匹配成功會提示如下信息,然後點擊 Next-Step
匹配
這裡讓你選擇一個時間欄位,就選擇@timestamp然後下一步結束創建,然後點擊左邊第一個菜單就能看到圖表和詳細信息了
日誌信息
其它的功能自己摸索吧

配置

ELK的配置文件都是以Volume的方式來掛載的,對應每個文件夾下麵的Configs裡面。
比如logstash的配置文件cd logstash/config下麵的logstash.yml就是他的配置文件。
對了這裡使用的版本需要密碼是因為es使用了一個商業版,有效期是30天,如果不想使用這個的話可以去es的配置目錄把xpack的配置改成如下就可以:

xpack.license.self_generated.type: basic
xpack.security.enabled: false
xpack.monitoring.collection.enabled: false

後面有空和大家再分享下通過kafka作為中間件的方式以及具體的一些配置內容

微信關註我哦!(轉載註明出處)關註我哦


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要: 事務在後端開發中無處不在,是數據一致性的最基本保證。要明白進事務的本質就是進到事務切麵的代理方法中,最常見的是同一個類的非事務方法調用一個加了事務註解的方法沒進入事務。我們以 代理為例,由於Spring的對於 代理的實現,進入被代理方法的時候實際上已經離開了“代理這一層殼子”,可以認為代碼走 ...
  • ★簡介 生產者消費者模式並不是GOF提出的23種設計模式之一,23種設計模式都是建立在面向對象的基礎之上的,但其實面向過程的編程中也有很多高效的編程模式,生產者消費者模式便是其中之一,它是我們編程過程中最常用的一種設計模式。 在實際的軟體開發過程中,經常會碰到如下場景:某個模塊負責產生數據,這些數據 ...
  • Ajax在請求controller時會賦值的類型不變,但是返回值,因為會走視圖解析器,所以會以地址的形式進行解析,而不會返回數據,需要在方法上加上註解,將返回類型解析成json類型 一、返回基本類型 @ResponseBody 將返回類型進行解析成json形式 二、返回對象 需要導入jar包 在需要 ...
  • 引言 "原文地址" 在這篇博客中我將探索一些關於Asp.net core 3.0應用的基礎功能——.csproj 項目文件和Program源文件。我將會描述他們從asp.net core 2.X在預設模版中是怎樣改變的,以及探討Aspnetcore3.0使用的Api的變化。 介紹 .Net core ...
  • 網上很多同步教程,按照教程操作upload時一直報錯:sync:invalid gist ID 查找問題很久才知道 gist和token是兩個東西。下麵重新梳理下: 一、下載安裝插件 Setting sync 二、github上生成gist 進入 your gists 隨便給自己的gist起個名,添 ...
  • 場景 實現一個 TextReader,使其以一種特定的編碼從位元組流中讀取字元。 關註公眾號霸道的程式猿獲取編程相關電子書、教程推送與免費下載。 大量編程視頻教程:https://space.bilibili.com/164396311 實現 文本文件讀取 新建命令視窗程式。 在main方法中: 在上 ...
  • 該文章是系列文章 "基於.NetCore和ABP框架如何讓Windows服務執行Quartz定時作業" 的其中一篇。 問題 "ABP.WindowsService/Demo.MyJob/4.0.0" 該項目不僅包含了Job服務,還有一個Abp項目自動生成的web站點服務。之前改造了job的日誌記錄, ...
  • 場景 CSDN: https://blog.csdn.net/badao_liumang_qizhi 博客園: https://www.cnblogs.com/badaoliumangqizhi/ 嗶哩嗶哩視頻教程: https://space.bilibili.com/164396311 實現 關 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...