# Kubetail
_Kubetail 是一个面向 Kubernetes 的实时日志仪表板_
演示: [https://www.kubetail.com/demo](https://www.kubetail.com/demo)
[](https://kubernetes.slack.com/archives/C08SHG1GR37)
[](CODE_OF_CONDUCT.md)
[](https://github.com/kubetail-org)
[English](../README.md) | 简体中文 | [日本語](README.ja.md) | [한국어](README.ko.md) | [Deutsch](README.de.md) | [Español](README.es.md) | [Português](README.pt-BR.md) | [Français](README.fr.md)
## 简介
**Kubetail** 是一个通用的 Kubernetes 日志仪表板,专门针对跨多容器工作负载的实时日志跟踪进行了优化。借助 Kubetail,你可以将某个工作负载中的所有容器日志(例如 Deployment 或 DaemonSet)合并到一条按时间排序的时间线上,并在浏览器或终端中查看。
Kubetail 的主要入口是 `kubetail` CLI 工具。它既可以在你的桌面上启动本地 Web 仪表板,也可以将原始日志直接流式输出到终端。在底层,Kubetail 通过集群的 Kubernetes API 直接从集群中获取日志,因此无需先将日志转发到外部服务即可开箱即用。Kubetail 还会使用 Kubernetes API 跟踪容器生命周期事件,以便在容器启动、停止或被替换时保持日志时间线同步。这使你能够在用户请求跨服务切换到不同临时容器时,依然连续地跟踪日志。
我们的目标是打造 Kubernetes 上最强大、最易用的日志平台,也非常希望你参与进来。如果你发现了 bug 或有建议,请创建 GitHub Issue,或者发送邮件到 hello@kubetail.com。
## 功能
* 简洁易用的界面
* 实时查看日志消息
* 按以下条件过滤日志:
* 工作负载(例如 Deployment、CronJob、StatefulSet)
* 绝对或相对时间范围
* 节点属性(例如可用区、CPU 架构、节点 ID)
* Grep
* 通过 Kubernetes API 获取日志消息,数据始终由你掌控(默认私有)
* 支持在多个集群之间切换(仅桌面版)
* 可在多种环境运行: Desktop、Cluster、Docker
## 快速开始
### 安装
你可以使用 [Homebrew](https://brew.sh/) 安装 `kubetail`:
```console
brew install kubetail
```
查看另外 15 种安装方式(例如 Krew、Snap、Winget、Ubuntu、Fedora、SUSE、Alpine、Arch、Gentoo、Nix、asdf、Chocolatey、Scoop、MacPorts)
```console
# Krew
kubectl krew install kubetail
# Snap
sudo snap install kubetail
# Winget
winget install kubetail
# Chocolatey
choco install kubetail
# Scoop
scoop install kubetail
# MacPorts
sudo port install kubetail
# Ubuntu/Mint (apt)
sudo add-apt-repository ppa:kubetail/kubetail
sudo apt update && sudo apt install kubetail-cli
# Fedora/CentOS/RHEL/Amazonlinux/Mageia (copr)
dnf copr enable kubetail/kubetail
dnf install kubetail
# SUSE (zypper)
zypper addrepo 'https://download.opensuse.org/repositories/home:/kubetail/$releasever/' kubetail
zypper refresh && zypper install kubetail-cli
# Alpine (apk)
apk add kubetail --repository=https://dl-cdn.alpinelinux.org/alpine/edge/testing
# Arch Linux (AUR)
yay -S --noconfirm kubetail-cli
# Gentoo (GURU)
ACCEPT_KEYWORDS="~$(portageq envvar ARCH)" emerge dev-util/kubetail
# Nix (Flake)
nix profile add github:kubetail-org/kubetail-nix
# Nix (Classic)
nix-env -i -f https://github.com/kubetail-org/kubetail-nix/archive/refs/heads/main.tar.gz
# asdf
asdf plugin add kubetail https://github.com/kubetail-org/asdf-kubetail.git
asdf install kubetail latest
```
如果你愿意,也可以直接下载[发布二进制文件](https://github.com/kubetail-org/kubetail/releases/latest),或者使用我们的安装脚本:
```console
curl -sS https://www.kubetail.com/install.sh | bash
```
### 用法
下面是一些使用 `kubetail` 的方式:
**1. 启动 Web 仪表板(GUI)**
```console
kubetail serve
```
**2. 在终端中查看日志**
```console
kubetail logs -f deployments/my-app
```
**3. 启用高级功能(安装 Kubetail API)**
```console
kubetail cluster install
```
**4. 初始化本地配置文件**
```console
kubetail config init
```
完整的[命令列表](https://www.kubetail.com/docs/cli#subcommands)请参阅文档。祝你 tail 日志愉快。
## 随处运行
除了在桌面上运行 Kubetail 外,你还可以在以下环境中运行它:
* [Cluster](https://www.kubetail.com/docs/getting-started/cluster/install)
* [Docker](https://www.kubetail.com/docs/getting-started/docker)
* [Minikube](https://www.kubetail.com/docs/getting-started/cluster/install#minikube)
## 文档
完整文档请访问 [https://www.kubetail.com](https://www.kubetail.com/)。
## 路线图与状态
这是 Kubetail 项目的高层计划,按顺序排列如下:
| | 步骤 | 状态 |
| - | ----------------------------------------------------- | ------ |
| 1 | 实时容器日志 | ✅ |
| 2 | 实时搜索与更完善的用户体验 | 🛠️ |
| 3 | 实时系统日志(例如 systemd、k8s events) | 🔲 |
| 4 | 基础可定制能力(例如颜色、时间格式) | 🔲 |
| 5 | 消息解析与指标 | 🔲 |
| 6 | 历史数据(例如日志归档、指标时间序列) | 🔲 |
| 7 | Kubetail API 与面向开发者的客户端库 | 🔲 |
| N | 世界和平 | 🔲 |
更多细节如下:
**实时容器日志**
用户可以通过 Web 仪表板快速、轻松地查看其集群中当前运行的 Pod 的容器日志。用户可以按工作负载组织查看容器日志,并在临时容器被创建和删除时继续跟踪日志。用户还可以按时间戳缩小查看范围,并按区域、可用区、节点等来源属性过滤日志。
**实时搜索与更完善的用户体验**
用户可以轻松地在桌面或集群中安装 Kubetail。默认情况下,Kubetail 仅使用 Kubernetes API 获取运行中的工作负载和容器日志等基础数据。如果用户需要更高级的功能,可以在集群中安装 Kubetail 自定义服务(即 “Kubetail Cluster API” 和 “Kubetail Cluster Agent”,统称为 “Kubetail API”),从而获得日志搜索、日志文件大小、最后事件时间戳等功能。Kubetail API 的安装、升级和卸载体验都经过精心打磨,用户可以通过 Kubetail Web 仪表板和 CLI 工具,在浏览器和终端中使用同样强大的日志查看能力。
**实时系统日志**
安装了 Kubetail API 的用户可以立即访问节点级日志(例如 systemd)和集群级日志(例如 Kubernetes events),并在一个集成界面中查看这些日志,该界面还会同时展示 CPU 使用率、内存使用量和磁盘空间等其他系统信息。系统日志会实时显示,并与其他日志合并到同一条时间线上。用户可以按时间戳和来源属性过滤系统日志。
**基础可定制能力**
用户将能够在使用 Web 仪表板和 CLI 工具时,通过修改用户设置来完全自定义 Kubetail 体验。用户设置既可以手动编辑配置文件,也可以通过仪表板 UI 进行修改。即使升级过程会新增、移除或修改用户设置,整个体验也会保持平滑一致。用户还可以选择在多个设备之间同步这些设置。
## 开发
### 仓库结构
这个 monorepo 包含以下模块:
* Kubetail CLI ([modules/cli](modules/cli))
* Kubetail Cluster API ([modules/cluster-api](modules/cluster-api))
* Kubetail Cluster Agent ([crates/cluster_agent](crates/cluster_agent))
* Kubetail Dashboard ([modules/dashboard](modules/dashboard))
它还包含 Kubetail Dashboard 前端的源代码:
* Dashboard UI ([dashboard-ui](dashboard-ui))
### 搭建开发环境
#### 依赖
* [Go](https://go.dev/)
* [pnpm](https://pnpm.io/)
* [Tilt](https://tilt.dev/)
* [兼容 Tilt 的集群](https://docs.tilt.dev/choosing_clusters.html)(例如 [minikube](https://minikube.sigs.k8s.io/docs/)、[kind](https://kind.sigs.k8s.io/docs/user/quick-start/)、[docker-desktop](https://docs.tilt.dev/choosing_clusters.html#docker-for-desktop))
* [ctlptl](https://github.com/tilt-dev/ctlptl)(可选)
#### 下一步
1. 创建一个[兼容 Tilt 的](https://docs.tilt.dev/choosing_clusters.html) Kubernetes 开发集群:
```console
# minikube
ctlptl apply -f hack/ctlptl/minikube.yaml
# kind
ctlptl apply -f hack/ctlptl/kind.yaml
# docker-desktop
ctlptl apply -f hack/ctlptl/docker-desktop.yaml
```
2. 启动开发环境:
```console
tilt up
```
3. 启动 Dashboard 服务:
```console
cd modules/dashboard
go run cmd/main.go -c hack/config.yaml
```
4. 在本地运行 Dashboard UI:
```console
cd dashboard-ui
pnpm install
pnpm dev
```
现在可以通过 [http://localhost:5173](http://localhost:5173) 访问仪表板。
为 Rust 优化开发环境(可选)
默认情况下,当你运行 `tilt up` 时,开发环境会以 "release" 构建来编译 Rust 组件。如果你想更快地迭代,可以让 Tilt 改为在本地使用 "debug" 构建来编译 Rust 代码。
#### 依赖
* [rustup](https://rustup.rs)
* [protobuf](https://protobuf.dev/installation/)
#### 下一步
首先,安装你的架构所需的 Rust target:
```console
# x86_64
rustup target add x86_64-unknown-linux-musl
# aarch64
rustup target add aarch64-unknown-linux-musl
```
接下来,安装 Rust 交叉编译器所需的工具:
```console
# macOS (Homebrew)
brew install FiloSottile/musl-cross/musl-cross
# Linux (Ubuntu)
apt-get install musl-tools
```
在 macOS 上,将以下内容添加到你的 `~/.cargo/config.toml` 文件中:
```
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
[target.aarch64-unknown-linux-musl]
linker = "aarch64-linux-musl-gcc"
```
最后,如需使用本地编译器,只需在运行 Tilt 时加上 `KUBETAIL_DEV_RUST_LOCAL` 环境变量:
```console
KUBETAIL_DEV_RUST_LOCAL=true tilt up
```
## 构建
### CLI 工具
要构建 Kubetail CLI 可执行文件(`kubetail`),请运行以下命令:
```console
make
```
构建完成后,你可以在本地 `bin/` 目录中找到该可执行文件。
### Dashboard
要为生产部署构建 Kubetail Dashboard 服务的 Docker 镜像,请运行以下命令:
```console
docker build -f build/package/Dockerfile.dashboard -t kubetail-dashboard:latest .
```
### Cluster API
要为生产部署构建 Kubetail Cluster API 服务的 Docker 镜像,请运行以下命令:
```console
docker build -f build/package/Dockerfile.cluster-api -t kubetail-cluster-api:latest .
```
### Cluster Agent
要为生产部署构建 Kubetail Cluster Agent 的 Docker 镜像,请运行以下命令:
```console
docker build -f build/package/Dockerfile.cluster-agent -t kubetail-cluster-agent:latest .
```
## 参与贡献
我们正在打造面向 Kubernetes 的最**易用**、最**高性价比**、最**安全**的日志平台,欢迎你的贡献。你可以通过以下方式帮助我们:
* UI/UX 设计
* React 前端开发
* 报告问题并提出新功能建议
欢迎通过 hello@kubetail.com 联系我们,或加入我们的 [Discord 服务器](https://discord.gg/CmsmWAVkvX) 或 [Slack 频道](https://join.slack.com/t/kubetail/shared_invite/zt-2cq01cbm8-e1kbLT3EmcLPpHSeoFYm1w)。