溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用Loki和fzf進(jìn)階你的Shell歷史記錄

發(fā)布時(shí)間:2021-10-26 10:37:18 來源:億速云 閱讀:175 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章主要介紹了怎么用Loki和fzf進(jìn)階你的Shell歷史記錄,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。


問題:一個(gè)持久的集中式 Shell 歷史記錄

我喜歡我的 shell 歷史,一直是 CTRL+R 的狂熱用戶。大約一年前,我的終端生活發(fā)生了翻天覆地的變化,我的同行 Dieter Plaetinck 向我介紹了命令行模糊查找器 fzf。

突然間,在命令中搜索就從這樣:

怎么用Loki和fzf進(jìn)階你的Shell歷史記錄

在 Loki 和 fzf 之前

變成了這樣:

怎么用Loki和fzf進(jìn)階你的Shell歷史記錄

在 Loki 和 fzf 之后

雖然 fzf 極大地提高了我的生活質(zhì)量,但圍繞著我的 shell 歷史記錄,還是缺少了一些片段:

  • 終端突然關(guān)閉、電腦崩潰、死機(jī)、整盤加密密鑰被遺忘等情況下會丟失 shell 歷史記錄。

  • 想從我的所有電腦上訪問我的 shell 歷史記錄。

我認(rèn)為我的 shell 歷史記錄是文件:它是一個(gè)重要的故事,我不想失去。將 Loki 與我的 shell 歷史結(jié)合起來,有助于解決這些問題和更多問題。

關(guān)于 Loki

Loki 采用了開源 Prometheus 項(xiàng)目用于度量的直觀的標(biāo)簽?zāi)P?,并將其擴(kuò)展到日志聚合的世界。這使得開發(fā)人員和運(yùn)維人員能夠使用相同的標(biāo)簽集在他們的度量和日志之間無縫切換。即使你沒有使用 Prometheus,也有很多理由說明 Loki 可能很適合你的日志存儲需求:

  • 低開銷: Loki 不做全文日志索引;它只創(chuàng)建你放在日志上的標(biāo)簽的索引。保持小的索引大大降低了 Loki 的運(yùn)維要求。我在 樹莓派 上運(yùn)行我的 loki-shell 項(xiàng)目,該項(xiàng)目使用 Loki 來存儲 shell 歷史記錄,只使用了 50MB 多一點(diǎn)的內(nèi)存。

  • *成本低:**日志內(nèi)容被壓縮并存儲在對象存儲中,如 Amazon S3、Google 云存儲、Azure Blob,甚至可以直接存儲在文件系統(tǒng)中。我們的目標(biāo)是使用價(jià)格低廉且持久的存儲。

  • 靈活性: Loki 以單個(gè)二進(jìn)制文件的形式提供,可以直接下載并運(yùn)行,也可以作為 Docker 鏡像在任何容器環(huán)境中運(yùn)行。在 Kubernetes 中可以用一個(gè) Helm 海圖 快速上手。如果你對日志工具的要求很高,可以看看運(yùn)行在 Grafana 實(shí)驗(yàn)室的 生產(chǎn)環(huán)境。它使用開源的 Jsonnet 和 Tanka 部署了同樣的 Loki 鏡像作為離散的構(gòu)件,以實(shí)現(xiàn)大規(guī)模的水平擴(kuò)展、高可用性、復(fù)制、讀寫路徑的分別擴(kuò)展、高度可并行的查詢等。

總而言之,Loki  的方法是保留一個(gè)關(guān)于你的日志元數(shù)據(jù)的小索引(標(biāo)簽),并將未索引的、壓縮的日志內(nèi)容存儲在廉價(jià)的對象存儲中,以使操作更容易和更便宜。該應(yīng)用程序被構(gòu)建為單進(jìn)程運(yùn)行,并很容易演變成一個(gè)高可用的分布式系統(tǒng)。你可以通過并行化和查詢的分片,在較大的日志工作負(fù)載上獲得較高的查詢性能  —— 有點(diǎn)像為你的日志設(shè)計(jì)的 MapReduce。

此外,這個(gè)功能是任何人都可以免費(fèi)使用的。與其 Grafana 開放觀測性平臺一樣,Grafana 實(shí)驗(yàn)室致力于將 Loki 打造成一個(gè)任何人都可以使用的全功能、全開放的日志聚合軟件。

開始吧

我在樹莓派上運(yùn)行 Loki,并將我的 shell 歷史記錄異地存儲在 S3 bucket 中。

當(dāng)我按下 CTRL+R,Loki 的 LogCLI 命令行界面會發(fā)起幾個(gè)批處理請求,傳輸至 fzf。下面是一個(gè)例子,上半部分顯示的是樹莓派上的 Loki 服務(wù)器日志。

怎么用Loki和fzf進(jìn)階你的Shell歷史記錄

樹莓派上 Loki 服務(wù)器的日志

準(zhǔn)備試試?下面的指南將幫助你設(shè)置和運(yùn)行 Loki,與你的 shell 歷史記錄集成。為了讓本教程保持簡潔,此設(shè)置將 Loki 本地運(yùn)行在你的計(jì)算機(jī)上,并在文件系統(tǒng)上存儲所有文件。

在 loki-shell 的 GitHub 版本庫,你可以找到所有這一切,以及如何設(shè)置一個(gè)更復(fù)雜的安裝的信息。

請注意,本教程不會改變?nèi)魏螄@你的歷史記錄的現(xiàn)有行為,所以 你現(xiàn)有的 shell 歷史記錄命令和歷史記錄設(shè)置不會被觸動。相反,這將用 Bash 中的 $PROMPT_COMMAND 和 Zsh 中的 precmd 復(fù)制命令歷史記錄到 Loki。在 CTRL+R 方面,它重載了 fzf 用來訪問 CTRL+R 命令的函數(shù)。因此試一試是安全的,如果你覺得不喜歡它,只需按照 GitHub 版本庫中的 卸載步驟 來刪除所有痕跡。你的 shell 歷史記錄不會被觸及。

第一步:安裝 fzf

安裝 fzf 有幾種方法,但我更喜歡 Git 方法:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf~/.fzf/install

對所有的問題提示說 yes。

如果你已經(jīng)安裝了 fzf,確保你已經(jīng)啟用了鍵綁定(即,確保當(dāng)你輸入 CTRL+R 時(shí),fzf 會彈出)。如果有必要的話,你可以重新運(yùn)行 fzf 安裝過程來啟用鍵綁定。

第二步:安裝 loki-shell

和 fzf 一樣,loki-shell 也有一個(gè) Git 版本庫和安裝腳本:

git clone --depth 1 https://github.com/slim-bean/loki-shell.git ~/.loki-shell~/.loki-shell/install

首先,該腳本創(chuàng)建了 ~/.loki-shell 目錄,所有的文件都將保存在該目錄下(包括 Loki 數(shù)據(jù)),接下來,它將下載 Promtail、LogCLI 和 Loki 的二進(jìn)制文件。

然后它會問:

Do you want to install Loki? ([y]/n)

如果你已經(jīng)為 Loki-shell 運(yùn)行了一個(gè)集中化的 Loki,你可以回答 n;然而,對于本教程,回答 y 或按回車鍵。

在本地運(yùn)行 Loki 有兩種方式:作為一個(gè) Docker 鏡像或作為一個(gè)單一的二進(jìn)制文件(支持添加為 systemd 服務(wù))。如果可以,我建議使用 Docker,因?yàn)槲艺J(rèn)為它稍微簡化了操作,但這兩者都可以工作。

使用 Docker 運(yùn)行

將 Loki 作為 Docker 鏡像運(yùn)行:

[y] to run Loki in Docker, [n] to run Loki as a binary ([y]/n) yError: No such object: loki-shellError response from daemon: No such container: loki-shellError: No such container: loki-shell54843ff3392f198f5cac51a6a5071036f67842bbc23452de8c3efa392c0c2e1e

如果這是你第一次運(yùn)行這個(gè)安裝程序,你可以忽略錯(cuò)誤信息。這個(gè)腳本將停止和替換運(yùn)行的 Loki 容器,如果版本不匹配,你可以重新運(yùn)行此腳本升級 Loki。

就是這樣!Loki 現(xiàn)在作為一個(gè) Docker 容器運(yùn)行了。

Loki 的數(shù)據(jù)將存儲在 ~/.loki-shell/data 中。

由于帶著 -restart=unless-stopped 標(biāo)志運(yùn)行該鏡像,所以它會在系統(tǒng)重啟時(shí)重啟該服務(wù),但如果你運(yùn)行 docker stop loki-shell 則會保持停止。

(如果你使用的是 Docker,你可以跳到 “Shell 集成”一節(jié)。)

以二進(jìn)制文件運(yùn)行

在 Linux 系統(tǒng)上運(yùn)行二進(jìn)制文件的方法有很多。這個(gè)腳本可以安裝一個(gè) systemd 服務(wù)。如果你沒有 systemd,你也可以使用二進(jìn)制安裝:

[y] to run Loki in Docker, [n] to run Loki as a binary ([y]/n) n Run Loki with systemd? ([y]/n) n This is as far as this script can take youYou will need to setup an auto-start for LokiIt can be run with this command: /home/username/.loki-shell/bin/loki -config.file=/home/username/.loki-shell/config/loki-binary-config.yaml

腳本會輸出你需要用來運(yùn)行 Loki 的命令,你可以自己設(shè)置一個(gè) init 腳本或其他方法來自動啟動它。

如果你想的話,你可以直接運(yùn)行該命令,從你當(dāng)前的 shell 運(yùn)行 Loki。

如果你有 systemd,你可以選擇讓腳本安裝 systemd 服務(wù)或顯示出你自己運(yùn)行它的命令:

Run Loki with systemd? ([y]/n) y Installing the systemd service requires root permissions.[y] to run these commands with sudo [n] to print out the commands and you can run them yourself. ([y]/n) nsudo cp /home/ed/.loki-shell/config/loki-shell.service /etc/systemd/system/loki-shell.servicesudo systemctl daemon-reloadsudo systemctl enable loki-shellsudo systemctl start loki-shellCopy these commands and run them when the script finishes. (press enter to continue)
Shell 集成

無論你如何安裝 Loki,你現(xiàn)在應(yīng)該看到一個(gè)提示:

Enter the URL for your Loki server or press enter for default (http://localhost:4100)

如果你已經(jīng)設(shè)置了一個(gè)中心化的 Loki,你應(yīng)在這里輸入其 URL。然而,這個(gè)演示只是使用了默認(rèn)的 URL,所以你可以按回車鍵。

它會輸出很多文本來解釋添加到你的 ~.bashrc 或 ~.zshrc(或兩者)的所有條目。

好了!

Finished. Restart your shell or reload config file.   source ~/.bashrc  # bash   source ~/.zshrc   # zsh
第三步:試試吧!

開始使用你的 shell,并使用 CTRL+R 查看你的命令。

打開多個(gè)終端窗口,在一個(gè)窗口中輸入命令,在另一個(gè)窗口中輸入 CTRL+R,你會看到你的命令立即可用。

另外,請注意,當(dāng)你在終端之間切換并輸入命令時(shí),使用 CTRL+R 可以立即使用它們,但向上箭頭的操作在終端之間不受影響。(如果你安裝了 Oh My Zsh,情況可能就不一樣了,因?yàn)樗鼤詣訉⑺忻钭芳拥綒v史記錄中。)

多次按下 CTRL+R 可以在按時(shí)間排序和按相關(guān)性排序之間切換。

請注意,此配置將只顯示當(dāng)前主機(jī)的查詢歷史記錄,即使你正在從多個(gè)主機(jī)向 Loki 發(fā)送 shell 數(shù)據(jù)。我認(rèn)為默認(rèn)情況下這是最合理的。如果你想改變這種行為,有很多地方可以調(diào)整;請參見 loki-shell 版本庫了解更多。

它還安裝了一個(gè)名為 hist 的別名。

alias hist="$HOME/.loki-shell/bin/logcli --addr=$LOKI_URL"

LogCLI 可以用來直接在 Loki 上查詢和搜索你的歷史,也允許你搜索其他主機(jī)。查看 LogCLI 的入門指南,了解更多關(guān)于查詢的信息。

Loki 的日志查詢語言(LogQL)提供了度量查詢,可以讓你做一些有趣的事情,例如,我可以看到在過去 30 天里我發(fā)出了多少次 kc 命令(我對 kubectl 的別名)。

怎么用Loki和fzf進(jìn)階你的Shell歷史記錄

計(jì)數(shù)一個(gè)命令的使用次數(shù)

額外增強(qiáng)

安裝 Grafana,擺弄一下你的 shell 歷史記錄。

docker run -d -p 3000:3000 --name=grafana grafana/grafana

打開 Web 瀏覽器,訪問 http://localhost:3000,使用默認(rèn)的 admin/admin 用戶名和密碼登錄。

在左邊,導(dǎo)航到“配置Configuration->數(shù)據(jù)源Datasources”,點(diǎn)擊“添加數(shù)據(jù)源Add Datasource”按鈕,然后選擇 “Loki”。

對于 URL,你應(yīng)該可以使用 http://localhost:4100(然而,在我的 WSL2 機(jī)器上,我必須使用計(jì)算機(jī)的實(shí)際 IP 地址)。

單擊“保存并測試Save and Test”。你應(yīng)該看到連接了數(shù)據(jù)源并找到了標(biāo)簽。

點(diǎn)擊左邊的“管理器Explore”圖標(biāo),確保選擇 Loki 數(shù)據(jù)源,并嘗試這個(gè)查詢:

{job="shell"}

如果發(fā)送 shell 命令的主機(jī)較多,可以使用“主機(jī)Host”標(biāo)簽將結(jié)果限制在某個(gè)主機(jī)上:

{job="shell", hostname="myhost"}.

你也可以用過濾表達(dá)式尋找特定的命令:

{job="shell"} |= "docker"

或者你可以從日志中探索度量的世界,看看你使用 shell 的頻率:

rate({job="shell"}[1m])

怎么用Loki和fzf進(jìn)階你的Shell歷史記錄

計(jì)算過去 20 天內(nèi) shell 的使用情況

想從一個(gè)事件中重建一個(gè)時(shí)間線?你可以通過特定的命令進(jìn)行過濾,查看它的運(yùn)行時(shí)間:

怎么用Loki和fzf進(jìn)階你的Shell歷史記錄

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么用Loki和fzf進(jìn)階你的Shell歷史記錄”這篇文章對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI