Tianji 介绍

介绍 Tianji 是一个集网站分析、网站状态监控、服务状态监控集一体的工具平台。 在我们日常使用中,我们在观察监控一个网站使往往需要使用多个工具一起使用,例如使用 GA 来进行 PV/UV 数据的收集,使用 uptime monitor 来查看服务器的网络及连通性,使用 prometheus 来查看服务器的状态等 那么有没有一个工具能满足这些需求呢? Tianji 就是这样一个工具,能够更方便更简洁的满足用户的需求。 安装 docker 安装 Tianji wget https://raw.githubusercontent.com/msgbyte/tianji/master/docker-compose.yml docker compose up -d 默认账号密码是 admin/admin kubernetes 安装 Tianji kubernetes 环境下可以使用 Helm 安装 helm repo add msgbyte https://msgbyte.github.io/charts helm search repo tianji helm install tianji msgbyte/tianji 本文使用了 Docker 进行安装,接下来的介绍也会以这个环境为主。 使用 安装完浏览器打开 http://localhost:12345/ 输入默认账号密码即进入主界面。 可以看到有六个栏目,接下来依次介绍这六个栏目的使用。 网站 网站顾名思义就是统计网站的PV/UV 数据,创建好一个网站后,可以在你的网站中嵌入相应的脚本代码,就可追踪相应的用户数据。 监控器 监控器就是针对网站云服务进行一个相应的监控,保证服务的稳定性。 ...

六月 22, 2024 · overstarry

应用内存升高原因排查

起因 最近一个部署了 go 应用的服务器出现了 OOM 的现象,内存占用过高。 原因 通过 Pyroscope 分析得出是因为 Minio 的 go sdk 中的 PutObject 函数占用了大量的内存。 Pyroscope 是什么,前面的文章已经介绍过了,这里就不过多介绍了。 接下来我们通过查看相关的源码来查看是什么原因。 // PutObject creates an object in a bucket. // // You must have WRITE permissions on a bucket to create an object. // // - For size smaller than 16MiB PutObject automatically does a // single atomic PUT operation. // // - For size larger than 16MiB PutObject automatically does a // multipart upload operation. // // - For size input as -1 PutObject does a multipart Put operation // until input stream reaches EOF. Maximum object size that can // be uploaded through this operation will be 5TiB. // // WARNING: Passing down '-1' will use memory and these cannot // be reused for best outcomes for PutObject(), pass the size always. // // NOTE: Upon errors during upload multipart operation is entirely aborted. func (c *Client) PutObject(ctx context.Context, bucketName, objectName string, reader io.Reader, objectSize int64, opts PutObjectOptions, ) (info UploadInfo, err error) { if objectSize < 0 && opts.DisableMultipart { return UploadInfo{}, errors.New("object size must be provided with disable multipart upload") } err = opts.validate() if err != nil { return UploadInfo{}, err } return c.putObjectCommon(ctx, bucketName, objectName, reader, objectSize, opts) } 从方法的注释可以看出,当传递的大小为 -1 时,会进行多次 put 操作,直到输入流结束。 多次 put 操作的最大大小为 5TiB, 并且不能重用内存,导致占用大量内存。 ...

五月 14, 2022 · overstarry

Pyroscope 持续分析平台

什么是 Pyroscope? Pyroscope是一个开源的持续分析系统,使用Go语言实现。服务端使用web页面查看,提供丰富的分析的功能,客户端提供Go、Java、Python、Ruby、PHP、.NET等多种语言的支持,并且支持PUSH、PULL两种采集方式。 Pyroscope 是一个开源的持续性能剖析平台。它能够帮你: 找出源代码中的性能问题和瓶颈 解决 CPU 利用率高的问题 理解应用程序的调用树(call tree) 追踪随一段时间内变化的情况 特性: 可以存储来自多个应用程序的多年剖析数据 你可以一次查看多年的数据或单独查看特定的事件 较低的 CPU 开销 数据压缩效率高,磁盘空间要求低 快捷的 UI 界面 部署架构图: Pyroscope server安装 Pyroscope server端可以通过docker安装: docker run -it -p 4040:4040 pyroscope/pyroscope:latest server 也可以在各中操作系统中直接安装。 比如Mac: brew install pyroscope-io/brew/pyroscope brew services start pyroscope-server 各Liunx发行版也方便安装 比如ubuntu: wget https://dl.pyroscope.io/release/pyroscope_0.10.2_amd64.deb sudo apt-get install ./pyroscope_0.10.2_amd64.deb 安装完成后,就可以通过web界面访问了: http://localhost:4040, 你可以通过配置文件更改监听端口以及其它一些配置项。 Pyroscope 客户端实践 Pyroscope 提供了多种客户端,比如Go、Java、Python、Ruby、PHP、.NET等多种语言的支持,并且支持PUSH、PULL两种采集方式。这里介绍 GO 语言的客户端实例,采用 PUSH 的方式. GO 客户端的 PUSH 方式通过使用标准runtime/pprof包来收集分析数据。 1 安装 go 客户端 ...

二月 26, 2022 · overstarry