Seq简介

Seq是老外开发的一个针对.NET平台非常友好的日志服务。支持容器部署,提供一个单用户免费的开发版本。

官网:https://datalust.co/seq

使用文档:https://docs.datalust.co/docs

Seq主体功能如下所示:

  1. 支持主流的编程语言,尤其对.NET非常友好

  2. 丰富的事件格式

    以结构化形式记录上文信息与应用程序事件,支持消息模板将文本数据与结构话数据无缝连接。下图中所有属性都是由使用者自定义的。

  3. 支持筛选语法和SQL查询,非常简单和灵活

    多种查询方式 -支持以SQL表达式查询,以及C#中的,==,!=,<,<=,内置StartsWith(),EndsWith()IndexOf()Contains(),并支持文本全文检索。

  4. 公开了内置字段和函数

  5. 支持仪表盘,可以自行创建和编辑图表

  6. 支持安装插件,插件可以使用.NET进行编写

  7. 支持发送邮件(通过插件)

  8. 支持团队操作

  9. 提供命令行客户端

  10. 支持健康检查(通过插件)

  11. 支持收集Docker日志

  12. 支持收集K8s日志

  13. 支持自定义警报和Webhook

部署到k8s

seq部署我们采用的是基于容器的部署,具体可以参考:https://docs.datalust.co/docs/getting-started-with-docker

腾讯云容器服务yaml配置如下所示:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: ""
generation:
labels:
k8s-app: seq
qcloud-app: seq
name: seq
namespace: default
spec:
progressDeadlineSeconds:
replicas:
revisionHistoryLimit:
selector:
matchLabels:
k8s-app: seq
qcloud-app: seq
strategy:
rollingUpdate:
maxSurge:
maxUnavailable:
type: RollingUpdate
template:
metadata:
labels:
k8s-app: seq
qcloud-app: seq
spec:
containers:
- env:
- name: ACCEPT_EULA
value: "Y"
image: datalust/seq:latest
imagePullPolicy: IfNotPresent
name: seq
resources:
limits:
cpu: 100m
memory: 2024Mi
requests:
cpu: 10m
memory: 256Mi
imagePullSecrets:
- name: qcloudregistrykey
- name: tencenthubkey
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: seq
namespace: default
spec:
externalTrafficPolicy: Cluster
ports:
- name: --tcp
nodePort:
port:
protocol: TCP
targetPort:
- name: --tcp
nodePort:
port:
protocol: TCP
targetPort:
selector:
k8s-app: seq
qcloud-app: seq
sessionAffinity: None
type: NodePort

注意:其中主机端口分别为31180(对应80,用于公开Seq UI和Web Api)、31181(对应5341,用于公开Seq接收终结点的端口)。

一般情况,日志不重要的话,我们可以不进行持久化配置。如需持久化,仅需配置“/data”的映射即可。

使用

Seq对.NET Core支持非常友好,支持:

当然还支持其他语言以及其他的一些方式,比如RabbitMQ、GELF、Windows事件等等。接下来,我们以基于NLog集成为例:

安装包NLog.Targets.Seq

安装NLog.Targets.Seq NuGet包。例如,在Visual Studio程序包管理器控制台中,键入:

PM> Install-Package NLog.Targets.Seq

修改NLog配置文件

第一步,需要先添加刚安装的扩展程序集:

<?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"> <extensions>
<add assembly="NLog.Targets.Seq"/>
</extensions>

然后需要定义规则:

 <targets>
<target name="seq" xsi:type="BufferingWrapper" bufferSize="" flushTimeout="">
<target xsi:type="Seq" serverUrl="http://localhost:5341" apiKey="" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="seq" />
</rules>

需要指定服务端接收端地址和ApiKey。接下来就可以直接使用了。

除此之外,我们还可以添加例如线程Id、机器名等属性,配置示例如下所示:

<target name="seq" xsi:type="Seq" serverUrl="http://localhost:5341" apiKey="">
<property name="ThreadId" value="${threadid}" as="number" />
<property name="MachineName" value="${machinename}" />
</target>

NLOG配置说明

说明

官网:https://nlog-project.org/?r=redirect

配置和使用

https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-2
https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3

参考配置

<?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="App_Data\Logs\nlogs.log"
throwExceptions="true"> <!-- 定义日志输出的根目录为web目录的上级目录 -->
<variable name="logdir" value="${basedir}/App_Data/logs"/> <extensions>
<add assembly="NLog.Web.AspNetCore"/>
<add assembly="NLog.Targets.Seq"/>
</extensions>
<targets async="true">
<default-target-parameters
type="File"
archiveAboveSize=""
maxArchiveFiles=""
archiveNumbering="Rolling"
keepFileOpen="false"
layout="${date:format=HH\:mm\:ss\:ffff}:[${level}] ${callsite} ${onexception:${exception:format=tostring} ${newline}${stacktrace}${newline}"/> <!--屏幕彩色打印消息-->
<target name="console" xsi:type="ColoredConsole"
layout="${date:format=HH\:mm\:ss\:ffff}:[${level}] ${message}"/> <!--默认日志-->
<target xsi:type="File" name="defaultLog" fileName="${logdir}/${level}/${shortdate}.log" layout="${date:format=HH\:mm\:ss\:ffff}: ${message} ${onexception:${exception:format=tostring} ${newline}${stacktrace}${newline}" /> <target name="warnLog" xsi:type="File"
fileName="${logdir}/${level}/${shortdate}.log"
layout="${date:format=HH\:mm\:ss\:ffff}: ${logger}${newline}${message} ${onexception:${exception:format=tostring} ${newline}${stacktrace}${newline}" /> <target name="seq" xsi:type="BufferingWrapper" bufferSize="" flushTimeout="">
<target xsi:type="Seq" serverUrl="http://devlogs.yourdomain.com" apiKey="DRkZrdeDMZIXY0gzZGXB">
<property name="ThreadId" value="${threadid}" as="number" />
<property name="MachineName" value="${machinename}" />
<property name="Environment" value="Development" />
<!--https://github.com/NLog/NLog/wiki/Logger-Layout-Renderer-->
<property name="Logger" value="${logger}" />
<!--https://github.com/NLog/NLog/wiki/AspNet-Request-IP-Layout-Renderer-->
<property name="IP" value="${aspnet-request-ip}" />
<!--https://github.com/NLog/NLog/wiki/AspNetRequest-Url-Layout-Renderer-->
<property name="Url" value="${aspnet-request-url:IncludeHost=true:IncludePort=true:IncludeQueryString=true:IncludeScheme=true}" />
<property name="Code" value="${aspnet-response-statuscode}" />
</target>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="seq" />
<logger name="*" levels="Trace,Debug,Info" writeTo="console,defaultLog" />
<logger name="*" minlevel="Warn" writeTo="console,warnLog" />
</rules>
</nlog>

集成之后,我们就可以非常方便的在Seq的面板上看到各种日志和图表了。

使用Seq搭建免费的日志服务的更多相关文章

  1. centos 如何用 rsyslog 搭建本地日志服务(续1: omprog模块与php deamon的配合使用)

    上一篇说到了如何用 rsyslog 搭建本地的日志服务,地址在这里,没有看的童鞋可以先瞅一眼 : http://www.cnblogs.com/smallrookie/p/5677004.html 显 ...

  2. go-zero docker-compose 搭建课件服务(九):http统一返回和集成日志服务

    0.索引 go-zero docker-compose 搭建课件服务(九):http统一返回和集成日志服务 0.1源码地址 https://github.com/liuyuede123/go-zero ...

  3. centos 如何用 rsyslog 搭建本地日志服务

    一.问题背景 最近项目遇到一个问题,服务器响应很慢,team中的两个有经验的工程师找了一台服务器分析了一下,发现问题出在磁盘写入过于频繁.这里大概介绍一下背景,我们的服务器上面主要是跑各种PHP接口, ...

  4. Rsyslog日志服务搭建

    rsyslog是比syslog功能更强大的日志记录系统,可以将日志输出到文件,数据库和其它程序.Centos 6.x默认的rsyslog版本是5.x. 网上关于rsyslog的安装配置文档倒是不少,但 ...

  5. 5分钟搭建网站实时分析:Grafana+日志服务实战

    原文地址:https://yq.aliyun.com/articles/227006 阿里云日志服务是针对日志类数据一站式服务,用户只需要将精力集中在分析上,过程中数据采集.对接各种存储计算.数据索引 ...

  6. 孤荷凌寒自学python第六十一天在Fedora28版的linux系统上找搭建本地Mongodb数据服务

    孤荷凌寒自学python第六十一天在Fedora28版的linux系统上找搭建本地Mongodb数据服务 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第七天.成功在本地搭建 ...

  7. 孤荷凌寒自学python第六十天在windows10上搭建本地Mongodb数据服务

     孤荷凌寒自学python第六十天在windows10上找搭建本地Mongodb数据服务 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第六天.成功在本地搭建了windows ...

  8. SpringCloud搭建注册中心与服务注册

    上一篇文章<微服务注册中心原理,看这篇就够了!>介绍了注册中心的概念和原理,本文将介绍下利用Eureka搭建中心并注册服务到注册中心的过程. 本文目录 一.Eureka介绍二.搭建注册中心 ...

  9. 搭建自己的ngrok服务(国内直接可用http://qydev.com/#)

    ngrok 服务可以分配给你一个域名让你本地的web项目提供给外网访问, 特别适合向别人展示你本机的web demo 以及调试一些远程的API (比如微信公众号,企业号的开发) ngrok的官方服务可 ...

随机推荐

  1. MacOS下Nginx安装

    1. 先安装homebrew 2. 安装Nginx,终端下执行: $ brew install nginx 安装过程中会自己安装依赖: 3. 启动nginx服务 $ nginx 成功后,使用浏览器打开 ...

  2. Python os.tcsetpgrp() 方法

    概述 os.tcsetpgrp() 方法用于设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg.高佣联盟 www.cgewang.com 语法 tcsetpgrp()方 ...

  3. Python List cmp()方法

    描述 cmp() 方法用于比较两个列表的元素.高佣联盟 www.cgewang.com 语法 cmp()方法语法: cmp(list1, list2) 参数 list1 -- 比较的列表. list2 ...

  4. PHP flock() 函数

    定义和用法 flock() 函数锁定或释放文件. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 flock(file,lock,block) 参数 描述 file 必需.规定要 ...

  5. PHP symlink() 函数

    定义和用法 symlink() 函数创建一个从指定名称连接的现存目标文件开始的符号连接. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 symlink(target,link) ...

  6. PHP getNamespaces() 函数

    实例 返回 XML 文档中使用的命名空间: <?php$xml=<<<XML高佣联盟 www.cgewang.com<?xml version="1.0&quo ...

  7. C/C++编程笔记:C++入门知识丨函数和函数模板

    本篇要学习的内容和知识结构概览 函数的参数及其传递方式 1. 函数参数传递方式 传值: 传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存 传地址值: 将实参所对应的内存空间的地址值 ...

  8. dsu on tree详解

    这个算法还是挺人性化的,没有什么难度 就是可能看起来有点晕什么的. 大体 思想是 利用重链刨分来优化子树内部的查询. 考虑一个问题要对每个子树都要询问一次.我们暴力显然是\(n^2\)的. 考虑一下优 ...

  9. 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用

    一.什么是 RestTemplate? RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpCo ...

  10. SpringBoot+Shiro+JWT前后端分离实现用户权限和接口权限控制

    1. 引入需要的依赖 我使用的是原生jwt的依赖包,在maven仓库中有好多衍生的jwt依赖包,可自己在maven仓库中选择,实现大同小异. <dependency> <groupI ...