续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中如何进行日志的统一管理。

Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架。如果您是首次阅读本系列文章。建议可以先从本文末尾的入门文章开始了解。

必不可少的日志管理

对应用进行日志记录和分析是诊断排查线上问题的重要手段。而简单基于控制台或者文件的直接记录既不利于开发者直接读取也不利于大规模分析。

因此,开发者往往会选择一些诸如 Exceptionless 或者 ELK 之类的日志管理方案,来实现线上环境的日志管理。

但是,我们仍然缺少一个在开发环境小巧可用、部署简易、最小资源占用、可视化良好的日志管理方案。

故而,本案例,让我们来使用 Tye 中已经扩展可用的 Seq 工具,来作为开发环境的日志管理和可视化工具。

创建测试应用

create-tye-seq-test.sh

dotnet new sln -n TyeTest
dotnet new webapi -n TyeTest
dotnet sln ./TyeTest.sln add ./TyeTest/TyeTest.csproj
tye init

通过以上命令,我们创建了一个测试的 API 项目,并且创建出了 tye.yml 文件。

直接使用 tye run 命令启动应用,我们其实可以在 tye dashboard 中查看到查看到以控制台方式输出的日志:

缺陷也非常明显,这种方式非常不利于阅读和分析。

启用 Seq 记录和查看日志

打开 tye.yml ,加入 seq 的扩展配置:

tye.yml

name: tyetest
extensions:
- name: seq
logPath: ./.logs
services:
- name: tyetest
project: TyeTest/TyeTest.csproj

从上面的配置可以看出:

  1. 只是增加了一个 extensions 节点。在其中设置了一个 seq 的子节点并配置了日志存储的位置。

使用 tye run 启动后,可以在 dashboard 中查看到启动好的 seq 服务。

打开 seq 便可以看到 seq 的查询界面:

使用浏览器调用一下 swagger 界面中的 API。便可以在 seq 中查看到最新的日志。

这便是使用 seq 最简单的一种方式。

seq 的搜索方式是非常类似于 SQL 的流式查询语句,开发者可以通过以下链接学习如何使用 UI 进行查询:

https://docs.datalust.co/docs/the-seq-query-language

我不想每次都重新部署 Seq

我们都知道, Tye 在停止运行时会尝试停止此次所有部署的容器,Seq 也是以容器的方式运行,因此,每次停止 Tye 时,容器都会被自动移除。这其实有点浪费时间。

因此,此处在进一步介绍如何在本地长久部署一个 Seq 实现重复利用。

实际上,根据 Tye 中的代码,如果服务中已经存在一个名称为 seq 的服务,那么就会自动使用该服务,而跳过创建步骤。

故此,我们只要本地部署一个 seq 服务,然后在 tye.yml 添加这个服务即可。

Seq 可以使用 Windows 安装包或者使用 docker 的方式进行安装。本示例将使用 docker 进行安装:

docker-compose.yml

version: '3.3'

services:
seq:
image: datalust/seq
restart: always
environment:
ACCEPT_EULA: Y
ports:
- 5380:80
- 5341:5341
volumes:
- ./.seqlogs:/data

使用 docker-compose up -d 方式长久启动 seq。那么就可以在 http://localhost:5380 查看到 seq dashboard。

然后,我们修改 tye.yml:

tye.yml

name: tyetest
extensions:
- name: seq
services:
- name: tyetest
project: TyeTest/TyeTest.csproj
- name: seq
external: true
bindings:
- name: http
containerPort: 5341

这里,主要的改动有:

  1. 不再需要在 extensions 中指定日志存储此位置,因为这个时候时候的是外部的 seq 服务,指定这个参数已经没有意义了。
  2. 添加了一个名为 seq 的服务,其中 external: true 指定了其为一个外部服务。故而启动时不会尝试去创建这个服务。

这样使用 tye run 启动后得到的结果和先前效果是一致的。但是,不会在每次都重新启动一个新的 seq 实例。而是使用我们手动部署的 seq 实例。极大加快的启动速度。

tye 源码关于 seq 创建方式的判断位置:
https://github.com/dotnet/tye/blob/master/src/Microsoft.Tye.Extensions/Seq/SeqExtensions.cs#L15
docker 方式安装 seq:
https://docs.datalust.co/docs/getting-started-with-docker
Windows 直接安装 seq:
https://docs.datalust.co/docs/getting-started

最后,发到 K8S 里面试一下

注意,和前面的 mongo 一样。 seq 并不会在使用 tye deploy 时主动创建。而是会尝试使用服务发现机制去寻找名为 seq 的服务。这其实和上节中手动创建 Seq 实例有点类似。

因此,如果要部署 extensions 包含 seq 的 tye.yml。请确保 k8s 集群中存在名称为 seq 的服务,这样日志才能正常输出。

小结

本篇,我们已经顺利完成了使用 Tye 中的 seq 扩展来实现日志的统一管理。同时也顺便练习了如何在 tye 中将为外部服务添加绑定。

实际上,Tye 不仅仅提供了 seq 扩展日志扩展,其也提供了更加广为人知的 Elasticsearch+Kibana 方案。

开发者可以通过以下链接查看相关的操作方法:

https://github.com/dotnet/tye/blob/master/docs/recipes/logging_elastic.md

下一篇,我们将进一步研究在 Tye 中实现对分布式链路追踪的实现。

最后但是最重要!

如果读者对该内容感兴趣,欢迎转发、评论、收藏文章以及项目。

最近作者正在构建以 Actor 模式 和 事件溯源 为理论基础的一套服务端开发框架。希望为开发者提供能够便于开发出 “分布式”、“可水平扩展”、“可测试性高” 的应用系统 ——Newbe.Claptrap

本篇文章是该框架的一篇技术选文,属于技术构成的一部分。

项目文档库:claptrap.newbe.pro

联系方式: QQ 群 610394020

您还可以查阅本系列的其他选文:

理论入门篇

  1. Newbe.Claptrap - 一套以 “事件溯源” 和 “Actor 模式” 作为基本理论的服务端开发框架

术语介绍篇

  1. Actor 模式
  2. 事件溯源(Event Sourcing)
  3. Claptrap
  4. Minion
  5. 事件 (Event)
  6. 状态 (State)
  7. 状态快照 (State Snapshot)
  8. Claptrap 设计图 (Claptrap Design)
  9. Claptrap 工厂 (Claptrap Factory)
  10. Claptrap Identity
  11. Claptrap Box
  12. Claptrap 生命周期(Claptrap Lifetime Scope)
  13. 序列化(Serialization)
  14. 最小竞争资源 (Minimal Competing Resources)

样例实践篇

  1. 设计一个火车票销售系统

开发工具篇

  1. 使用 Tye 辅助开发 k8s 应用竟如此简单(一)
  2. 使用 Tye 辅助开发 k8s 应用竟如此简单(二)
  3. 使用 Tye 辅助开发 k8s 应用竟如此简单(三)
  4. 使用 Tye 辅助开发 k8s 应用竟如此简单(四)
  5. 使用 Tye 辅助开发 k8s 应用竟如此简单(五)
  6. 使用 Tye 辅助开发 k8s 应用竟如此简单(六)

其他番外篇

  1. 谈反应式编程在服务端中的应用,数据库操作优化,从 20 秒到 0.5 秒
  2. 谈反应式编程在服务端中的应用,数据库操作优化,提速 Upsert
  3. 十万同时在线用户,需要多少内存?——Newbe.Claptrap 框架水平扩展实验
  4. docker-mcr 助您全速下载 dotnet 镜像
  5. 十多位全球技术专家,为你献上近十个小时的.Net 微服务介绍
  6. 年轻的樵夫哟,你掉的是这个免费 8 核 4G 公网服务器,还是这个随时可用的 Docker 实验平台?
  7. 如何使用 dotTrace 来诊断 netcore 应用的性能问题
  8. 只要十步,你就可以应用表达式树来优化动态调用

GitHub 项目地址:https://github.com/newbe36524/Newbe.Claptrap

Gitee 项目地址:https://gitee.com/yks/Newbe.Claptrap

您当前查看的是先行发布于 www.newbe.pro 上的博客文章,实际开发文档随版本而迭代。若要查看最新的开发文档,需要移步 claptrap.newbe.pro

------ 本文结束 ------

使用 Tye 辅助开发 k8s 应用竟如此简单(四)的更多相关文章

  1. 使用 Tye 辅助开发 k8s 应用竟如此简单(一)

    最近正巧在进行 Newbe.Claptrap 新版本的开发,其中使用到了 Tye 来辅助 k8s 应用的开发.该系列我们就来简单了解一下其用法. Newbe.Claptrap 是一个用于轻松应对并发问 ...

  2. 使用 Tye 辅助开发 k8s 应用竟如此简单(二)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中使用服务发现. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次阅读本系 ...

  3. 使用 Tye 辅助开发 k8s 应用竟如此简单(三)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何对数据库进行链接. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...

  4. 使用 Tye 辅助开发 k8s 应用竟如此简单(五)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...

  5. 使用 Tye 辅助开发 k8s 应用竟如此简单(六)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们将进一步研究 Tye 与分布式应用程序运行时 Dapr 如何碰撞出更精彩的火花. Newbe.Claptrap 是一个用于轻松应对并发问题 ...

  6. 使用 Tye 辅助开发 dotnet 应用程序

    newbe.pro 已经给我们写了系列文章介绍Tye 辅助开发k8s 应用: 使用 Tye 辅助开发 k8s 应用竟如此简单(一) 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 使用 Tye ...

  7. WPF 辅助开发工具

    原文:WPF 辅助开发工具 以下介绍的工具均为免费版,有些是源代码开放,希望对大家有用. Kaxaml 轻量级XAML 编辑器,可以同时进行图像和XAML 代码的编辑.最终生成开发人员想要的XAML ...

  8. python辅助开发模块(非官方)如pil,mysqldb,openpyxl,xlrd,xlwd

    官方文档 只是支持win32, 不支持win64 所以很麻烦 民间高人,集中做了一堆辅助库,下载后,用python安装目录下的scripts中,pip和easy_install就可以安装了 pytho ...

  9. Android辅助开发工具合集

    https://github.com/389273716/android-skill-summary/blob/master/开发工具使用指南/辅助开发工具.md

随机推荐

  1. kafka架构,消息存储和生成消费模型,Kafka与其他队列对比,零拷贝,Kafka基本介绍

    kafka架构,消息存储和生成消费模型,Kafka与其他队列对比,零拷贝,Kafka基本介绍 一.初识kafka 1.1SparkStreaming+Kafka好处: 1.2Kafka的架构: 二.k ...

  2. Django(多表查询操作)

    首先了解一下 mysql中的表之间的关系,一对一,一对多,多对一,多对多. 一对多关系.多对一关系.一对一关系 至少都有一侧是单个实体,所以记录之间的联系通过外键实现,让外键指向这个实体. 实现这种关 ...

  3. 写了这么多年 JavaScript ,竟然还不知道这些技巧?

    不少人有五年的 JavaScript 经验,但实际上可能只是一年的经验重复用了五次而已.完成同样的逻辑和功能,有人可以写出意大利面条一样的代码,也有人两三行简洁清晰的代码就搞定了.简洁的代码不但方便阅 ...

  4. 【STM32】时钟

    1. 在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL: ① HSI是高速内部时钟,RC振荡器,频率为8MHz: ② HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源 ...

  5. 力扣643.子数组最大平均数I-C语言实现

    题目 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示例: 输入:[1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5- ...

  6. Hive创建HBase,ES外部表

    1.创建HBase外部表 CREATE EXTERNAL TABLE `ods_women`( `rowkey` string COMMENT 'from deserializer', `articl ...

  7. 【bzoj2429】[HAOI2006]聪明的猴子(图论--最小瓶颈生成树 模版题)

    题意:有M只猴子,他们的最大跳跃距离为Ai.树林中有N棵树露出了水面,给出了它们的坐标.问有多少只猴子能在这个地区露出水面的所有树冠上觅食. 解法:由于要尽量多的猴子能到达所有树冠,便用Kruskal ...

  8. java.awt.event.MouseEvent鼠标事件的定义和使用 以及 Java Swing-JTextArea的使用

    最近发现一个CSDN大佬写的Java-Swing全部组件的介绍:Java Swing 图形界面开发(目录) JTextArea 文本区域.JTextArea 用来编辑多行的文本.JTextArea 除 ...

  9. zoj3494 BCD Code(AC自动机+数位dp)

    Binary-coded decimal (BCD) is an encoding for decimal numbers in which each digit is represented by ...

  10. Codeforces Round #645 (Div. 2) C. Celex Update

    题目链接:C.Celex Update 题意: 给你如图所示的图形,问从(x1,y1)−>(x2,y2)路径上的不同的元素和的数量是多少. 题解: 从(1,1)到(3,3) 元素和的1−2−4− ...