.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
3、展示日志
上图只是控制台的展示。实际应用中,可以将日志存在ES,然后用Kibana进行可视化展示。有了这个东西,应用程序只须负责将产生的日志提交给logstash就可以了,储存、分析都不用操心。
logstash只是Elastic下面的一个工具而已,没啥好说的,不值得花太多时间。但这种服务独立,服务共享的思想可以学习。
转载地址:https://leftfist.blog.csdn.net/article/details/113104910 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年05月02日 10时22分12秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
opencv相关操作(cv2) (python)
2019-04-30
lmdb数据库的读取与转换(二) —— 数据集操作
2019-04-30
Lua语言
2019-04-30
Python __doc__获得模块的文档字符串内容
2019-04-30
Python sys.path和模块搜索路径
2019-04-30
github.io网页无法打开(连接不是私密连接)
2019-04-30
git submodule
2019-04-30
linux中source、sh、bash、./有什么区别
2019-04-30
vscode git
2019-04-30
基于MATLAB的二进制数字调制与解调信号的仿真——2FSK
2019-04-30
基于MATLAB的二进制数字调制与解调信号的仿真——2PSK
2019-04-30
基于MATLAB的模拟调制信号与解调的仿真——AM
2019-04-30
基于MATLAB的模拟调制信号与解调的仿真——DSB
2019-04-30
基于MATLAB的模拟调制信号与解调的仿真——SSB
2019-04-30
pyc文件
2019-04-30
操作系统实验之生产者和消费者程序
2019-04-30
操作系统实验之猴子过桥问题的模拟程序
2019-04-30
POJ - 3067 Japan (树状数组 思维)
2019-04-30