Graylog 是開源的紀錄集中管理系統,可以集中管理各個應用程式的執行 Log,並且帶有強大的查詢功能,不再需要時時連上Server翻找 Log,難找又有安全性問題
Garylog 使用了 Elasticsearch 以及 MongoDb,易於做橫向擴展 ; 本身不支援 Windows,官方強烈建議在 Linux 上執行(Docker 也是一個選擇)
本篇會直接使用官方教學的 docker-compose.yml,技術性趨近於0(XD
1. Docker
docker-compose.yml
- 管理者帳號為 admin
- 管理者密碼為 GRAYLOG_ROOT_PASSWORD_SHA2,內容是Sha256加密
- 如果要讓其他裝置連接, GRAYLOG_HTTP_EXTERNAL_URI 需要設定為對外的 Uri
version: '2'
services:
mongodb:
image: mongo:3
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.5
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
graylog:
image: graylog/graylog:3.2
environment:
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
- GRAYLOG_ROOT_PASSWORD_SHA2=<Sha256 Password>
- GRAYLOG_HTTP_EXTERNAL_URI=http:
links:
- mongodb:mongo
- elasticsearch
depends_on:
- mongodb
- elasticsearch
ports:
- 9000:9000
- 1514:1514
- 1514:1514/udp
- 12201:12201
- 12201:12201/udp
然後在 docker-compose.yml 所在的目錄下執行 cmd
docker-compose up
如果要停止,則執行這段
docker-compose down
接著從 localhost:9000 進入(如果進不去可能是還在初始化中,可以看 up 時印出的執行紀錄是不是遇到了 exception)
2. Garylog
- 登入後需要先設定 inputs 讓 Garylog有輸入來源,從 System => inputs
- 接著這邊選擇 “GELF UDP”(也有不少其他的可以選擇),然後點選 “Launch new input”
- 比較需要注意的是 Port 的部分,對應的是在 docker-compose 上設定的 Port
3. ASP.NET Core
安裝 nuget 套件
dotnet add package Gelf.Extensions.Logging
在 Startup 上加入Garylog服務
- 這邊有從 appsettings.json 取出設定,下一步會過去添加
- AdditionalFields 可以加入自定義的資訊進去
services.AddLogging(config =>
{
services.Configure<GelfLoggerOptions>(Configuration.GetSection("Graylog"));
config.AddGelf(options =>
{
options.AdditionalFields["machine_name"] = Environment.MachineName;
options.AdditionalFields["app_version"] = Assembly.GetEntryAssembly()
?.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
?.InformationalVersion;
});
});
appSettings.json
"Graylog": {
"Host": "127.0.0.1",
"Port": 12201,
"LogSource": "GraylogSample"
},
接著測試一下
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogError("Test");
return View();
}
}
回到 Graylog 後,就能看到 Log順利的丟上去了
點開每個 Log 裡面也存著非常詳細的資訊,若有需要找到某一次 Request 的相關 Log,只需要點開後點選 “TraceId” 並且 “Add to Query”,這樣就只會列著該 Request 的相關 Log了
Garlog docs https://docs.graylog.org/en/3.2/pages/installation/docker.html
Graylog 是開源的紀錄集中管理系統,可以集中管理各個應用程式的執行 Log,並且帶有強大的查詢功能,不再需要時時連上Server翻找 Log,難找又有安全性問題
Garylog 使用了 Elasticsearch 以及 MongoDb,易於做橫向擴展 ; 本身不支援 Windows,官方強烈建議在 Linux 上執行(Docker 也是一個選擇)
本篇會直接使用官方教學的 docker-compose.yml,技術性趨近於0(XD
1. Docker
docker-compose.yml
version: '2' services: mongodb: image: mongo:3 elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.5 environment: - http.host=0.0.0.0 - transport.host=localhost - network.host=0.0.0.0 - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 graylog: image: graylog/graylog:3.2 environment: - GRAYLOG_PASSWORD_SECRET=somepasswordpepper - GRAYLOG_ROOT_PASSWORD_SHA2=<Sha256 Password> - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/ links: - mongodb:mongo - elasticsearch depends_on: - mongodb - elasticsearch ports: - 9000:9000 - 1514:1514 - 1514:1514/udp - 12201:12201 - 12201:12201/udp
然後在 docker-compose.yml 所在的目錄下執行 cmd
如果要停止,則執行這段
接著從 localhost:9000 進入(如果進不去可能是還在初始化中,可以看 up 時印出的執行紀錄是不是遇到了 exception)
2. Garylog
3. ASP.NET Core
安裝 nuget 套件
在 Startup 上加入Garylog服務
services.AddLogging(config => { services.Configure<GelfLoggerOptions>(Configuration.GetSection("Graylog")); config.AddGelf(options => { options.AdditionalFields["machine_name"] = Environment.MachineName; options.AdditionalFields["app_version"] = Assembly.GetEntryAssembly() ?.GetCustomAttribute<AssemblyInformationalVersionAttribute>() ?.InformationalVersion; }); });
appSettings.json
接著測試一下
public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { _logger.LogError("Test"); return View(); } }
回到 Graylog 後,就能看到 Log順利的丟上去了
點開每個 Log 裡面也存著非常詳細的資訊,若有需要找到某一次 Request 的相關 Log,只需要點開後點選 “TraceId” 並且 “Add to Query”,這樣就只會列著該 Request 的相關 Log了
Garlog docs https://docs.graylog.org/en/3.2/pages/installation/docker.html