用 Loki 和 fzf 进阶你的 Shell 历史记录


用 Loki 和 fzf 进阶你的 Shell 历史记录

文章插图
 
Loki 扩展了 Prometheus 用于度量监测和日志聚合的模型 。
• 来源:linux.cn • 作者:Ed Welch • 译者:Xingyu.Wang •
(本文字数:6786,阅读时长大约:9 分钟)
 
Loki 是一个 Apache 2.0 许可的开源日志聚合框架,由 Grafana 实验室设计,并在不断发展的社区的巨大支持之下建立 。它也是我每天为之努力的项目 。在这篇文章中,我将不只是谈论 Loki 如何工作,而是提供一个实际操作的介绍,以解决实际问题 。
问题:一个持久的集中式 Shell 历史记录我喜欢我的 shell 历史,一直是 CTRL+R 的狂热用户 。大约一年前,我的终端生活发生了翻天覆地的变化,我的同行 Dieter Plaetinck 向我介绍了命令行模糊查找器 fzf。
突然间,在命令中搜索就从这样:
用 Loki 和 fzf 进阶你的 Shell 历史记录

文章插图
在 Loki 和 fzf 之前
变成了这样:
用 Loki 和 fzf 进阶你的 Shell 历史记录

文章插图
在 Loki 和 fzf 之后
虽然 fzf 极大地提高了我的生活质量,但围绕着我的 shell 历史记录,还是缺少了一些片段:
  • 终端突然关闭、电脑崩溃、死机、整盘加密密钥被遗忘等情况下会丢失 shell 历史记录 。
  • 想从我的所有电脑上访问我的 shell 历史记录 。
我认为我的 shell 历史记录是文件:它是一个重要的故事,我不想失去 。将 Loki 与我的 shell 历史结合起来,有助于解决这些问题和更多问题 。
关于 LokiLoki 采用了开源 Prometheus 项目用于度量的直观的标签模型,并将其扩展到日志聚合的世界 。这使得开发人员和运维人员能够使用相同的标签集在他们的度量和日志之间无缝切换 。即使你没有使用 Prometheus,也有很多理由说明 Loki 可能很适合你的日志存储需求:
低开销: Loki 不做全文日志索引;它只创建你放在日志上的标签的索引 。保持小的索引大大降低了 Loki 的运维要求 。我在 树莓派 上运行我的 loki-shell 项目,该项目使用 Loki 来存储 shell 历史记录,只使用了 50MB 多一点的内存 。
  • *成本低:**日志内容被压缩并存储在对象存储中,如 Amazon S3、google 云存储、Azure Blob,甚至可以直接存储在文件系统中 。我们的目标是使用价格低廉且持久的存储 。
灵活性: Loki 以单个二进制文件的形式提供,可以直接下载并运行,也可以作为 Docker 镜像在任何容器环境中运行 。在 Kubernetes 中可以用一个 Helm 海图 快速上手 。如果你对日志工具的要求很高,可以看看运行在 Grafana 实验室的 生产环境。它使用开源的 Jsonnet 和 Tanka 部署了同样的 Loki 镜像作为离散的构件,以实现大规模的水平扩展、高可用性、复制、读写路径的分别扩展、高度可并行的查询等 。
总而言之,Loki 的方法是保留一个关于你的日志元数据的小索引(标签),并将未索引的、压缩的日志内容存储在廉价的对象存储中,以使操作更容易和更便宜 。该应用程序被构建为单进程运行,并很容易演变成一个高可用的分布式系统 。你可以通过并行化和查询的分片,在较大的日志工作负载上获得较高的查询性能 —— 有点像为你的日志设计的 MapReduce 。
此外,这个功能是任何人都可以免费使用的 。与其 Grafana 开放观测性平台一样,Grafana 实验室致力于将 Loki 打造成一个任何人都可以使用的全功能、全开放的日志聚合软件 。
开始吧我在树莓派上运行 Loki,并将我的 shell 历史记录异地存储在 S3 bucket 中 。
当我按下 CTRL+R,Loki 的 LogCLI 命令行界面会发起几个批处理请求,传输至 fzf 。下面是一个例子,上半部分显示的是树莓派上的 Loki 服务器日志 。
用 Loki 和 fzf 进阶你的 Shell 历史记录

文章插图
树莓派上 Loki 服务器的日志
准备试试?下面的指南将帮助你设置和运行 Loki,与你的 shell 历史记录集成 。为了让本教程保持简洁,此设置将 Loki 本地运行在你的计算机上,并在文件系统上存储所有文件 。
在 loki-shell 的 GitHub 版本库,你可以找到所有这一切,以及如何设置一个更复杂的安装的信息 。
请注意,本教程不会改变任何围绕你的历史记录的现有行为,所以 


    推荐阅读