聊聊如何解決官方提供的onpremise專案安裝sentry速度過慢問題

linyb極客之路 發表於 2022-11-29

前言

何為sentry

sentry是一個基於Django構建的現代化開源的實時錯誤追蹤系統,可以幫助開發者發現問題、追蹤問題

sentry官方文件

https://docs.sentry.io/

sentry安裝

我們可以使用官方提供的https://github.com/getsentry/onpremise.git的專案進行安裝。

安裝步驟如下

以在centos7安裝為例

1、克隆onpremise專案
yum install git
git clone https://github.com/getsentry/onpremise.git
2、切換到onpremise目錄,執行install.sh安裝指令碼
 cd onpremise
 ./install.sh

只要執行這兩步,就可以悠哉的喝杯咖啡等待安裝完成了。後面你會發現,這個安裝的時間,絕不是喝一杯咖啡的時間就可以解決了,可能是要喝N杯。因為這個等待時間實在是有點漫長,我第一次安裝耗時差不多有3個小時。因為有了這次體驗,後面再安裝,我就在思考如何提升這個安裝速度了

如何提升onpremise專案安裝senrty的速度

透過觀察執行的install.sh指令碼的日誌,發現他執行到

RUN apt-get update && apt-get install -y --no-install-recommends cron && \
    rm -r /var/lib/apt/lists/*

這句指令碼就會非常慢,他會下載debian,而且一旦下載沒成功,就會報錯退出,就得重新再來一次,讓人會很抓狂。因為下載debian的地址是在國外,所以下載速度就異常慢,那我們解決的思路就有要麼翻牆,要麼就是切換debian的映象源。我的方案是後面一種

因此這句指令碼執行前,我們可以加如下指令碼

Run sed -i 's#http://deb.debian.org#https://mirrors.163.com#g' /etc/apt/sources.list

這句話的意思就是將debian的映象源切換成163映象源

或者你也可以用以下指令碼,也可以達到上面的效果(不過不是很推薦這種方式,因為下面這句指令碼的意思是安裝debian10版本的映象源,如果sentry依賴是高於debian10版本,那就完犢子

RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \

    echo deb http://mirrors.163.com/debian/ buster main non-free contrib >>/etc/apt/sources.list && \

    echo deb http://mirrors.163.com/debian/ buster-updates main non-free contrib >>/etc/apt/sources.list && \

    echo deb http://mirrors.163.com/debian/ buster-backports main non-free contrib >>/etc/apt/sources.list && \

    echo deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib >>/etc/apt/sources.list && \

    echo deb-src http://mirrors.163.com/debian/ buster main non-free contrib >>/etc/apt/sources.list && \

    echo deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib >>/etc/apt/sources.list && \

    echo deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib >>/etc/apt/sources.list && \

    echo deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib >>/etc/apt/sources.list

這個指令碼的修改位置在onpremise/cron/Dockerfile,就是修改cron的Dockerfile。

修改後的完整指令碼為

ARG BASE_IMAGE
FROM ${BASE_IMAGE}
USER 0
RUN if [ -z "${http_proxy}" ]; then echo "Acquire::http::proxy \"${http_proxy}\";" >> /etc/apt/apt.conf; fi
RUN if [ -z "${https_proxy}" ]; then echo "Acquire::https::proxy \"${https_proxy}\";" >> /etc/apt/apt.conf; fi
Run sed -i 's#http://deb.debian.org#https://mirrors.163.com#g' /etc/apt/sources.list
RUN apt-get update --fix-missing && apt-get install -y --no-install-recommends cron --fix-missing && \
    rm -r /var/lib/apt/lists/*
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

修改後,重新執行install.sh,你就會發現速度會有不一樣提升

總結

本文主要是基於切換debian映象源來提高sentry安裝速度,因為sentry的版本更新還是比較快的,不同的版本,解決方案可能就不一樣,本文僅能當做參考。不過大道至簡,我們遇到這種問題,我們可以透過觀察他的安裝過程,從中找一些蛛絲馬跡。說點題外的,也不懂為啥sentry會依賴那麼多種元件,基本上主流的中介軟體,比如kafka、zookeeper、clickhouse、redis等它都用上了,這對運維可是要提高了不少要求。

本文的安裝主要是基於docker安裝,至於如果是想安裝到k8s上,推薦用helm,因為sentry依賴的元件實在有點多。下面的連結是sentry的charts,感興趣的朋友可以嘗試一下
https://github.com/helm/charts/tree/master/stable/sentry