.net将日志提交给logstash
发布日期:2021-06-30 17:18:53 浏览次数:2 分类:技术文章

本文共 3142 字,大约阅读时间需要 10 分钟。

基本上,每个系统都有日志输出这一功能。不管采用什么成熟框架,或者自己开发吧,大多是保存到数据库,或者输出到文件,然后对这些数据进行分析、展示。

这种思路,主体还是各人自扫门前雪,每个系统自己负责日志的输出、存储、应用。

现在微服务时代,日志也可以独立划分出去,对外提供服务。比如下面介绍的这个logstash。

logstash,从名字看,是日志存储器之意。实际上,我觉得它叫日志收集器更合适。它提供多种方式对应用程序进行日志收集,比如日志文件,http,tcp;然后收集到的日志,可以存储到数据库里,比如ES(Elasticsearch)。显然,logstash在其中,只是一个日志贩子或中介。

下面以我们实际项目为例,介绍一下logstash的用法。

1、运行logstash

是一个服务,下载下来以后就可以直接运行。运行的时候指定配置文件就行,如:

bin/logstash -f config/default.conf

default.conf是我自己编辑的,内容如下:

input {
#接收http提交方式 http{
#可接收来自任何IP地址提交的日志 host => "0.0.0.0" port => 9090 codec => json } #接收tcp提交方式 tcp{
port => 5044 #json_lines,比较长的json codec => json_lines }}output {
#输出到控制台 stdout {
} #输出到文件 file{
path => "./test-%{+YYYY-MM-dd}.txt" }}

通过这个配置文件,应用程序可以通过http方式,或者socket方式,将日志以json格式提交给logstash。

logstash接收到以后,会在控制台中展示,同时还保存到按日期命名的日志文件里。

2、提交日志给logstash

应用系统将日志写入logstash,java有现成的例子,但.net就惨了。极少,我只看到过网上有提到使用serilog的。但这个东东需要.net core或者很高版本的。net framework支持。我们项目,有的还在用.net3.5,怎么搞?

其实根本不需要这个serilog,直接提交就好。示例如下:

using Microsoft.VisualStudio.TestTools.UnitTesting;using Newtonsoft.Json;using Newtonsoft.Json.Linq;using System;using System.IO;using System.Net;using System.Net.Sockets;using System.Text;namespace UnitTestProject{
[TestClass] public class TestLogstash {
[TestMethod] public void testTcp() {
//通过socket方式提交给logstash //通过服务器的ip和端口号,创建TcpClient实例 using (TcpClient client = new TcpClient("192.168.0.98", 5044)) {
NetworkStream clientStream = client.GetStream(); BinaryWriter bw = new BinaryWriter(clientStream, Encoding.UTF8); string sj = getJsonString(); byte[] postData = Encoding.UTF8.GetBytes(sj); bw.Write(postData); bw.Close(); client.Close(); } } [TestMethod] public void TestHttp() {
//通过http方式提交给logstash string url = "http://localhost:9090"; string sj = getJsonString(); byte[] postData = Encoding.UTF8.GetBytes(sj); string re; using (WebClient webClient = new WebClient()) {
webClient.Encoding = Encoding.GetEncoding("utf-8"); webClient.Headers.Add("Content-Type", "application/json"); byte[] responseData = webClient.UploadData(url, "POST", postData);//得到返回字符流 re = Encoding.UTF8.GetString(responseData); } } string getJsonString() {
JObject jobj = getJson(); return JsonConvert.SerializeObject(jobj); } JObject getJson() {
string datajson = @"{ ""host"": ""192.168.0.98"", ""service"": ""花果山林地租赁系统"", ""pid"": ""1"", ""log"": ""hello world"" }"; return (JObject)JsonConvert.DeserializeObject(datajson); } }}

3、展示日志

在这里插入图片描述
上图只是控制台的展示。实际应用中,可以将日志存在ES,然后用Kibana进行可视化展示。

有了这个东西,应用程序只须负责将产生的日志提交给logstash就可以了,储存、分析都不用操心。

logstash只是Elastic下面的一个工具而已,没啥好说的,不值得花太多时间。但这种服务独立,服务共享的思想可以学习。

转载地址:https://leftfist.blog.csdn.net/article/details/113104910 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:J2EE
下一篇:某单位网络拓扑结构

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年05月02日 10时22分12秒