国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

GitLab+Jenkins搭建DevOps一體化運維平臺

這篇具有很好參考價值的文章主要介紹了GitLab+Jenkins搭建DevOps一體化運維平臺。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引言

? 大家拿到代碼后,要如何運行呢?導入IDEA,然后啟動?開發(fā)過程可定沒有問題,那生產(chǎn)環(huán)境呢?在現(xiàn)在互聯(lián)網(wǎng)大環(huán)境下,越來越要求開發(fā)運維一體化。如果對于企業(yè)級的項目管理方式不了解,那么開發(fā)工作將舉步維艱。這一節(jié)課主要帶大家快速理解一下電商項目的運維部署方式。電商項目經(jīng)過綜合考慮,即迎合互聯(lián)網(wǎng)大廠的DevOps一體化運維趨勢,又盡量降低運維的門檻,實現(xiàn)了一套簡化版的自動化部署體系。其目的,是為了讓大部分同學都能夠理解互聯(lián)網(wǎng)大廠的DevOps是怎么回事。當然,有基礎的同學也可以根據(jù)電商的部署方案拓展出虛擬化,云原生等更貼近現(xiàn)代化的部署方式。并且可以基于自己的開發(fā)經(jīng)驗,開始思考如何落地DevOps,來提高項目部署的效率。

? 今天本文關(guān)注點主要是以下幾個問題:

  • 熟悉SpringBoot常見的Maven打包方式
  • 基于Jenkins和GitLab部署基礎自動化運維體系
  • CI\CD的優(yōu)化方案
  • 基于FileBeat+Logstash+ES實現(xiàn)的典型分布式日志收集體系

一、大廠都在做的DevOps,CI\CD都是什么?

? 談到DevOps,只要你有實際項目的開發(fā)經(jīng)驗,那么對這個詞一定不會陌生。各大互聯(lián)網(wǎng)廠商都在不斷推出自己的DevOps實踐落地的理論、規(guī)則、產(chǎn)品。我們這個電商項目也不例外。代碼最終需要經(jīng)過DevOps的一系列操作才能部署到服務器上真實運行。那到底什么是DevOps呢?

1、開發(fā)與運維割裂的問題

? 當開發(fā)人員基于本地開發(fā)環(huán)境完成了代碼開發(fā)后,最終是需要部署到生產(chǎn)的服務器上執(zhí)行的。在傳統(tǒng)的運維體系下,開發(fā)和運維通常都是割裂的。很多大型項目中,開發(fā)人員不允許接觸生產(chǎn)環(huán)境的服務器,服務器只能由運維團隊進行操作。這樣可以極大的提高服務器的安全性。尤其對于像我們的電商這樣面向互聯(lián)網(wǎng)的項目,不經(jīng)保護的開放服務,就是給黑客提供攻擊的靶子。

? 因此,在現(xiàn)代化的大型軟件項目中,對于開發(fā)人員的要求也更為全面。雖然開發(fā)人員不要求像專業(yè)的運維人員一樣,掌握服務器的各種安全策略、參數(shù)調(diào)優(yōu)等。但是對于基礎的運行環(huán)境運維操作也必須要了解,這樣才能指導運維人員進行業(yè)務環(huán)境部署,也就是開發(fā)運維一體化。雖然現(xiàn)在有很多工具能夠幫助開發(fā)人員減少一些復雜的操作,但是開發(fā)人員還是需要更多的接觸運維的工作。

? 但是這種運維方式,同時也給項目開發(fā)過程中帶來了很多困難。

? 一方面,開發(fā)人員只能向運維人員描述具體的部署方式。但是由于開發(fā)人員無法接觸到生產(chǎn)服務器,所以文字描述的方式往往很難保證操作的準確性。經(jīng)常會出現(xiàn)開發(fā)人員在開發(fā)環(huán)境運行得很好的迭代包,升級到生產(chǎn)環(huán)境上之后無法保證升級的效果。對于現(xiàn)在流行的基于敏捷開發(fā)的大型項目來說,很多需求需要以代碼分支的方式進行并行開發(fā),然后再合并部署,這其中更是非常容易出現(xiàn)錯誤,造成生產(chǎn)環(huán)境不穩(wěn)定。

? 另一方面,當項目在線上運行出現(xiàn)故障時,開發(fā)人員也很難第一時間接觸到錯誤日志。如果線上出現(xiàn)問題,開發(fā)人員往往需要找運維部門協(xié)同,才能獲取到生產(chǎn)環(huán)境的服務日志。這會極大的延緩錯誤排查的及時性。

2、DevOps與CI\CD

? 以上那些問題的核心,其核心就是在傳統(tǒng)運維體系下,開發(fā)和運維之間是有天然的壁壘和鴻溝的。而DevOps則是試圖打破這些壁壘鴻溝的一種方法論。DevOps是Development(開發(fā))和Operation(運維)兩個單詞的組合,他是一種重視軟件開發(fā)人員和運維技術(shù)人員之間溝通合作的文化、運動或者慣例。通過自動化軟件交互和架構(gòu)變更的流程,使得構(gòu)建、測試、發(fā)布軟件時能夠更加快捷、頻繁和可靠。

? 總而言之,DevOps是一個標準,一種方法論或者說是一個目標,并不指一個特定的規(guī)則或者一系列特殊的工具。那要如何落地DevOps呢?通常,這就需要CI\CD出馬了。

? CI\CD中的CI指的是持續(xù)集成Continuous Integeration,他是開發(fā)人員的自動化過程。成功的CI意味著人員同的新代碼變更會定期構(gòu)建、測試并合并到共享存儲庫(比如Git或者SVN)。而CD指的是持續(xù)交付Continuous Delivery和持續(xù)部署Continuous Deployment。成功的CD意味著運維人員可以從共享存儲庫中持續(xù)獲取到最新的產(chǎn)品副本,并確保最新的產(chǎn)品副本可以正確更新到服務器上。

? 關(guān)于如何達成CI\CD,各大互聯(lián)網(wǎng)廠商提供了大量的方法論以及工具。下面就以電商項目為例,基于最為典型的GitLab和Jenkins搭建一套簡單的自動部署環(huán)境。

二、使用GitLab+Jenkins搭建CI\CD執(zhí)行環(huán)境

? 關(guān)于GitLab和Jenkins的安裝過程,這里只簡單介紹一下關(guān)鍵步驟。如果對安裝有問題的同學,可以自行到網(wǎng)上搜索一下安裝教程,網(wǎng)上的資料非常多。

1、GitLab安裝

? GitLab是企業(yè)中最為常用的私有代碼倉庫解決方案。你可以把他理解為一個企業(yè)自己搭建的GitHub或者Gitee(程序員交友平臺,不會沒用過把?)。企業(yè)通常會通過GitLab搭建自己的代碼倉庫,開發(fā)人員的應用代碼都通過GitLab進行協(xié)同開發(fā)。

? GitLab是一個開源項目,分為免費的ce社區(qū)版和收費的ee企業(yè)版。這里介紹ce社區(qū)版的安裝過程。

? 首先要檢查服務器配置。GitLab需要部署非常多的后臺服務,通常建議單機內(nèi)存不要低于4G。如果配置太低的話,會出現(xiàn)很多奇怪的問題。Linux服務器需要提前安裝幾個服務 yum install -y curl policycoreutils-python openssh-server 。如果已經(jīng)安裝了,這一步可以省略。

? 然后獲取GitLab安裝包。社區(qū)版的GitLab下載地址https://packages.gitlab.com/gitlab/gitlab-ce。
本項目中采用的Linux服務器,就可以選擇下載gitlab-ce-15.1.0-ce.0.el7.x86_64.rpm。

? 接下來就可以安裝GitLab了。 執(zhí)行rpm -Uvh gitlab-ce-15.1.0-ce.0.el7.x86_64.rpm 開始安裝。

? 安裝完成后,第一次運行GitLab前,需要執(zhí)行一次配置初始化操作。 gitlab-ctl reconfig。 這個過程耗時比較長。

? 接下來就可以使用gitlab-ctl指令來操作gitlab服務了。

  • gitlab-ctl reconfigure 重新配置gitlab。
  • gitlab-ctl start 啟動gitlab
  • gitlab-ctl stop 停止gitlab
  • gitlab-ctl restart 重啟gitlab
  • gitlab-ctl status 查看gitlab服務狀態(tài)
  • gitlab-ctl tail 查看gitlab服務日志。

? 服務啟動完成后,就可以訪問gitlab服務了。默認的服務端口就是80端口。默認的用戶名和密碼是root/123456(通常建議登錄后立即修改默認密碼)。

GitLab+Jenkins搭建DevOps一體化運維平臺

如果需要修改訪問的地址和端口,可以修改/etc/gitlab/gitlab.rb配置文件,修改其中的external_url屬性即可。

## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
##!
##! Note: During installation/upgrades, the value of the environment variable
##! EXTERNAL_URL will be used to populate/replace this value.
##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP
##! address from AWS. For more details, see:
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
external_url 'http://192.168.0.1'

? 接下來就可以登錄進入GitLab,維護基礎權(quán)限信息,并將項目代碼上傳到Git倉庫當中。這些基礎的操作跟GitHub或者Gitee基本上是一樣的。

GitLab+Jenkins搭建DevOps一體化運維平臺

2、Jenkins安裝

? Jenkins是企業(yè)最常用的一個自動化部署軟件。下載地址為https://www.jenkins.io/download/ 。建議下載LTS(長期支持)版本的war包部署。下載獲取jenkins.war文件。

? 首先,需要安裝JDK。 Jenkins運行需要JDK環(huán)境支持,目前Jenkins建議使用JDK11版本。

? 然后,就可以直接啟動Jenkins。 啟動指令 java -jar Jenkins.war。 當然,你也可以使用后臺執(zhí)行的方式。 nohup java -jar jenkins.war & 。這種方式不會占用當前命令行窗口,日志輸出到nohup.out下。

在啟動時,也可以指定端口。 java -jar Jenkins.war --httpPort=8080 。 端口默認就是8080端口。

? 在第一次啟動的過程中,Jenkins會在日志文件中打印默認的admin用戶密碼。這個需要留意一下。

*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

e3c2de8a2084429ea733ef30512a0523

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************

? 啟動完成后,就可以訪問Jenkins的前臺管理頁面http://192.168.65.200:8080/。第一次訪問時,前端頁面會會引導進行一些初始化工作。例如,需要輸入admin用戶的默認密碼,這個密碼就在啟動日志當中。
GitLab+Jenkins搭建DevOps一體化運維平臺

后續(xù)還會引導設定admin用戶的用戶名。

? 然后會引導安裝一些插件。這一步比較自由。你可以按照默認方式安裝,也可以選擇一些你認識的常用插件安裝。關(guān)鍵插件漏了沒有關(guān)系,后續(xù)也可以再安裝插件。

GitLab+Jenkins搭建DevOps一體化運維平臺

? 引導步驟安裝完成后,就可以進入Jenkins的首頁了。

GitLab+Jenkins搭建DevOps一體化運維平臺

? 接下來需要安裝幾個核心的插件。選擇 Manage Jenkins-> Manage Plugins,進入插件管理頁面。

GitLab+Jenkins搭建DevOps一體化運維平臺

? 在這里需要安裝幾個核心的插件。包括Git 、Git client、NodeJS Plugin、Maven integration plugin。如果你希望Jenkins能夠更多的顯示中文,還可以安裝 Localization:Chinese(Simplified)插件。下載完成后有些插件需要重啟才能生效。Jenkins重啟的方式是直接在瀏覽器上訪問restart接口。

GitLab+Jenkins搭建DevOps一體化運維平臺

? 重啟完成后,還需要配置幾個基礎的組件。進入Mange Jenkins->Global ToolConfiguration頁面。在這里需要對Maven、Git和NodeJS組件進行配置。你可以選擇按照頁面提示,自動下載安裝對應的組件。 當前電商環(huán)境中是直接另外去安裝對應的組件。

? 例如對于git,只要服務器能夠支持git指令接口。如果沒有安裝的話,可以使用yum -install git 安裝git客戶端。

[root@192-168-65-200 ~]# git --version
git version 1.8.3.1

? 而Maven和NodeJS插件,可以去官網(wǎng)上下載對應的壓縮包,解壓后,將bin子目錄配置到環(huán)境變量當中。跟安裝JDK的方式差不多。同樣只要服務器能夠直接支持mvn指令和node指令即可。

[root@192-168-65-200 ~]# mvn -versin
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /app/maven/apache-maven-3.6.3
Java version: 11.0.10, vendor: Oracle Corporation, runtime: /app/jdk/jdk-11.0.10
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
[root@192-168-65-200 bin]# node -v
v14.15.0

? 到這里基礎環(huán)境就算搭建完成了。

3、基于GitLab+Jenkins快速實現(xiàn)CI\CD

? 接下來需要在Jenkins中配置一個構(gòu)建任務。下面就以電商項目的后端工程為例,演示配置過程。另外電商項目的兩個前端工程也可以以類似的方式進行配置。

1、創(chuàng)建一個maven項目

? 在Jenkins首頁選擇新建Item,然后選擇構(gòu)建一個maven項目
GitLab+Jenkins搭建DevOps一體化運維平臺

2、配置項目構(gòu)建及部署過程

? 接下來在Jenkins中配置項目的配置項還是挺多的,這里只列出幾個關(guān)鍵的配置。其他部分可以自行調(diào)整。

? 首先需要在源碼管理部分配置對應的git倉庫地址。

GitLab+Jenkins搭建DevOps一體化運維平臺

? 構(gòu)建觸發(fā)器部分,可以選擇配置Poll SCM選項。這個選項可以定時掃描Git代碼倉庫。當發(fā)現(xiàn)Git倉庫代碼有變化,即有代碼提交時,就會觸發(fā)一次構(gòu)建任務。當前電商項目采用手動控制發(fā)布的方式,就沒有選擇配置了。

GitLab+Jenkins搭建DevOps一體化運維平臺

這里面Poll SCM是一個比較常用的配置。通過這個配置,可以讓jenkins定期去檢查代碼庫。如果發(fā)現(xiàn)代碼庫有更新,則自動觸發(fā)當前任務,完成項目的構(gòu)建以及部署。當前電商項目編譯任務太重,提交也不太頻繁,所以就選擇不配置該屬性。

? 構(gòu)建環(huán)境部分建議選擇一下JDK版本,因為電商項目采用的是JDK8版本進行開發(fā)。

GitLab+Jenkins搭建DevOps一體化運維平臺

? 接下來的Build部分,就可以選擇需要執(zhí)行的編譯腳本。

GitLab+Jenkins搭建DevOps一體化運維平臺

這一步相當于指定使用 mvn package -Dmaven.test.skip=true指令對后端項目進行重新打包構(gòu)建。

如果是前端項目,就需要用Nodejs的npm run build指令來構(gòu)建。

? 構(gòu)建完成之后,就會在后端項目的各個模塊的target目錄下生成可執(zhí)行的包。這時,可以選擇用Jenkins將這些Jar包分發(fā)到遠程服務器上,并直接運行。

GitLab+Jenkins搭建DevOps一體化運維平臺

前端項目也可以用同樣的方式傳遞到遠端服務器上。遠端指令只需要執(zhí)行 nginx -s reload 更新一下即可。

? 這樣就完成了一個基礎項目的配置過程。接下來,保存之后,就可以選擇Jenkins首頁對應項目右側(cè)的三角指令發(fā)起一次構(gòu)建了。構(gòu)建過程中如果有問題,可以查看構(gòu)建日志,進行排查。

這里完成的是一個最簡單的Maven項目構(gòu)建。實際上,在企業(yè)中,還會構(gòu)建更復雜的任務。

例如集成Docker,進行虛擬化部署。

添加Blue Ocean插件做一些代碼質(zhì)量檢測,郵件通知等復雜的步驟。甚至使用Pepeline構(gòu)建更為復雜的任務流水。

或者搭建SonarQube服務,并通過jenkins集成。這樣就可以使用SonarQube服務來進行代碼質(zhì)量檢測。

三、后端項目打包及部署方式

? 從剛才的部署過程中可以看到,基于Jenkins的CI\CD配置方式就是執(zhí)行Maven對項目進行編譯,然后將Jar包傳到遠端服務器上執(zhí)行。這個過程跟我們手動進行任務部署是差不多的,只不過Jenkins將這些過程自動完成了。

? 但是這里其實有一個小問題。當前電商項目在編譯時,是在pom.xml中采用SpringBoot的Maven插件將整個項目打成了一個可執(zhí)行的Jar包。 這樣打出來的Jar包可以直接使用Java -jar指令執(zhí)行。

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.2.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <!-- 解決運行包不能被其他包依賴的問題 -->
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
</build>

? 但是,這種方式也有一個很大的問題,就是Jar包太大了。這么大的Jar包,編譯會很耗時,并且在網(wǎng)絡中傳輸是非常麻煩的。所以,對于一些大型項目,通常不會采用這種一體化的fat Jar的方式。而會選擇將依賴單獨打成小的Jar包。這樣后續(xù)每次更新只需要更新調(diào)整過的少量Jar包即可。那有哪些Maven打包方式可以幫助我們打出小的jar包呢?

? 其實Maven提供了很多的打包插件。例如將上面的plugin部分替換為maven-dependency-plugin,就可以將項目打成小包。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <!-- <version>2.10</version> -->
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>export</outputDirectory> <!-- 將依賴包放入export文件夾 -->
                <excludeTransitive>false</excludeTransitive>
                <stripVersion>true</stripVersion>
            </configuration>
        </execution>
    </executions>
</plugin>

? 通過這種方式,就可以將所有依賴的jar包都放到export文件夾中,target目錄下的jar包只包含當前項目的源碼,文件大小就會小很多。

? 將export目錄下的所有jar包和target下的當前項目jar包上傳到服務器的同一個目錄當中,就可以直接運行了。這種方式就跟很多開源框架的運行方式相似了。至于要如何運行呢?當然就不能用java -jar指令簡單執(zhí)行了,需要通過java -cp指令指定依賴包和主啟動類執(zhí)行。至于如何使用這個指令,你之前學過的很多開源組件都可以提供幫助了。比如shardingproxy、RocketMQ等,都有這樣的腳本。

? 這里也給出一個簡單的Linux執(zhí)行腳本示例,供你參考。

more runapp.sh 

#!/bin/sh
#執(zhí)行jar包
RUN_LIBS=""
#依賴jar包 自行制定目錄
SUPPORT_LIBS=""
RUN_LIB_PATH="/app/lib"
SUPPORT_LIB_PATH="/app/support"
#加載程序包
for i in ${RUN_LIB_PATH}/* ; do
   RUN_LIBS=${RUN_LIBS}:$i
done
#加載依賴包
for i in ${SUPPORT_LIB_PATH}/* ; do
   SUPPORT_LIBS=${SUPPORT_LIBS}:$i
done
#整合classpath
CLASSPATH=${RUN_LIBS}:${SUPPORT_LIBS}
export CLASSPATH
#調(diào)用java指令執(zhí)行。-D輸入?yún)?shù) java中可以用 System.getProperties讀取。同時指定執(zhí)行入口類 SpringBootApplication  這是一個典型的Springboot的執(zhí)行方式。
java  -Xdebug  -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=27899,suspend=n -cp $CLASSPATH  -Dspring.profiles.active=prod com.tuling.TulingmallCartApplication -D
user.timezone=GMT+08 1>tulingmall-admin.out 2>tulingmall-admin.err &
echo Start App Success!

實際上這樣定制腳本對于提高運行效率是非常重要的,你學了很多次的JVM調(diào)優(yōu)就體現(xiàn)在腳本定制的過程中。在腳本最后的java指令中,可以添加哪些優(yōu)化參數(shù)?

另外,這種部署方式,你可以自己嘗試用jenkins配置自動部署嗎?

? 實際上,Maven還提供了非常多插件。比如對于很多復雜的項目,可能需要將不同的模塊輸出到多個不同的jar包當中,而不是所有代碼全都輸出一個jar包。下面就是使用maven-jar-plugin插件的一個可行的示例,將不同模塊的代碼分別整合到myapp.jar和myapp2.jar中。有興趣你可以自己嘗試下。

<plugin> 
  <groupId>org.apache.maven.plugins</groupId>  
  <artifactId>maven-jar-plugin</artifactId>  
  <version>3.0.2</version>  
  <configuration>  <!-- manifest配置信息 主要是可以配置主執(zhí)行類。有主執(zhí)行類,可以用java-jar直接執(zhí)行。沒有的話就需要指定執(zhí)行類 -->
    <archive> 
      <manifest> 
        <addClasspath>true</addClasspath>  
        <classpathPrefix>support/</classpathPrefix>  
        <mainClass>com.myapp.MyAppApplication</mainClass> 
<!-- 可以按上面的方式自己配置,也可以指定MF文件打包。 -->
        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
      </manifest> 
    </archive>  
  </configuration>
  <executions> 
    <execution> 
      <id>myapp1-jar</id>  
      <phase>package</phase>  
      <goals> 
        <goal>jar</goal> 
      </goals>  
      <configuration> 
        <classifier>myapp</classifier>  
        <includes> 
          <include>com/myapp/**</include>  
          <include>mybatis/**</include>  
          <include>templates/**</include>  
          <include>*.properties</include>  
          <include>dubbo.xml</include> 
        </includes> 
      </configuration> 
    </execution>  
    <execution> 
      <id>myapp2-jar</id>  
      <phase>package</phase>  
      <goals> 
        <goal>jar</goal> 
      </goals>  
      <configuration> 
        <classifier>myapp2</classifier>  
        <includes> 
          <include>com/myapp2/crawler/*</include>  
          <include>com/myapp2/crawler/*</include>  
          <include>com/myapp2/utils/**</include>  
          <include>log4j.properties</include> 
        </includes> 
      </configuration> 
    </execution>  
  </executions> 
</plugin>

? 如果你對Maven感興趣,可以去Maven官網(wǎng)上看看Maven目前官方提供的插件。 https://maven.apache.org/plugins/index.html。 這上面能找到非常多有趣的插件,并且都有詳細的說明。比如changelog插件,可以打印出Maven倉庫中最近的提交記錄。checkstyle和pmd插件可以對代碼進行靜態(tài)檢查。javadoc插件可以打印出項目文檔,你還可以用pdf插件,打印出pdf版本的項目文檔。或者使用antrun插件去執(zhí)行一些ant腳本(老程序員應該對ant很熟悉)。 很多精彩等你發(fā)現(xiàn)。

四、使用FileBeat+Logstash+ES實現(xiàn)分布式日志收集。

? 這一章節(jié)是一個補充的內(nèi)容。在大型項目中,往往服務都是分布在非常多不同的機器上,每個機器都會打印自己的log日志。

GitLab+Jenkins搭建DevOps一體化運維平臺

? 但是,這樣分散的日志,本來就無法進行整體分析。再加上微服務的負載均衡體系,甚至連請求打到了哪個服務器上都無法確定。給問題排查帶來了很多的困難。因此就需要將分散的日志收集到一起,這樣才能整體進行分析。

? 在Java應用中,后續(xù)我們會介紹使用skywalking,基于微服務架構(gòu)進行整體鏈路追蹤。但是這種方式會顯得比較重。如果只是分析nginx這樣的中間件,skywalking顯然就無能為力了。因此,還需要一個比較簡單快捷,對應用無侵入的方式統(tǒng)一收集日志。通常,業(yè)界常用的還是通過ELK中間件來收集日志。整體的流程是這樣的。

GitLab+Jenkins搭建DevOps一體化運維平臺

? filebeat,logstash和es都是ELK組件中的標準處理組件。其中,ES是一個高度可擴展的全文搜索和分析引擎,能夠?qū)Υ笕萘康臄?shù)據(jù)進行接近實時的存儲、搜索和分析操作,通常會跟Kibana部署在一起,由Kibana提供圖形化的操作功能。LogStash是一個數(shù)據(jù)收集引擎,他可以動態(tài)的從各種數(shù)據(jù)源搜集數(shù)據(jù),并對數(shù)據(jù)進行過濾、分析和統(tǒng)一格式等簡單操作,并將輸出結(jié)果存儲到指定位置上。但是LogStash服務過重,如果在每個應用上都部署一個logStash,會給應用服務器增加很大的負擔。因此,通常會在應用服務器上,部署輕量級的filebeat組件。filebeat可以持續(xù)穩(wěn)定的收集簡單數(shù)據(jù),比如Log日志,統(tǒng)一發(fā)給logstash進行收集后,再經(jīng)過處理存到ES。

? 這一套流程是企業(yè)中最為基礎的分布式日志收集方案。這一節(jié)課就帶大家實際搭建一個filebeat和logstash服務,用來收集前端項目的nginx日志,然后將nginx日志經(jīng)過logstash保存到es中。

關(guān)于ES以及配到的Kibana,有VIP課程帶大家搭建使用,這里就不介紹如何搭建了。只是介紹一下filebeat和logstash的搭建過程。

? 首先,搭建LogStash

? 去官網(wǎng)下載與ES配套的LogStash 7.17.3版本發(fā)布包logstash-7.17.3-linux-x86_64.tar.gz。 下載地址:https://www.elastic.co/cn/downloads/past-releases#logstash 。
使用tar -zxvf logstash-7.17.3-linux-x86_64.tar.gz 將壓縮包解壓到es用戶根目錄。

? 解壓完成后需要配置Logstash需要的JDK。這個JDK不需要額外下載,在logstash的安裝目錄下有一個jdk目錄,里面有內(nèi)置的配套JDK。這時,需要配置一個環(huán)境變量LS_JAVA_HOME指向這個內(nèi)置的JDK即可。

? 接下來可以簡單啟動一下logstash進行測試。進入logstash的安裝目錄,啟動一個簡單的logstash任務。

bin/logstash -e 'input { stdin { } } output { stdout {} }'

? 這個任務啟動需要一定的時間。

? 啟動完成后,就可以從logstash的控制臺輸入信息,然后又重新輸出到控制臺中。使用ctrl_+D退出控制臺。

#控制臺輸入hello
hello    
# 控制臺輸出logstash處理結(jié)果
{
       "message" => "hello",
      "@version" => "1",
          "host" => "es-node3",
    "@timestamp" => 2022-09-14T02:14:05.709Z
}

? 這樣一個簡單的logstash就安裝完成了。

? 接下來需要對logstash的輸入和輸出目錄進行配置。進入config目錄,在目錄下直接修改logstash-sample.conf文件即可。

配置文件名字可以隨便取,后續(xù)啟動時需要指定配置文件。

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  beats {
    port => 5044
  }
}

filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    index => nginxlog
    user => "elastic"
    password => "123456"
  }
}

這個配置中:

input表示輸入,這里表示從filebeat輸入消息,接收的端口是5044。

output表示數(shù)據(jù)的輸出,這里表示將結(jié)果輸出到本機的elasticsearch中,索引是nginxlog。

filer表示對輸入的內(nèi)容進行格式化處理。這里指定的grok是logstash內(nèi)置提供的一個處理非結(jié)構(gòu)化數(shù)據(jù)的過濾器。他可以以一種類似于正則表達式的方式來解析文本。簡單的配置規(guī)則比如:%{NUMBER:duration} %{IP:client} 就是從文本中按空格,解析出一個數(shù)字型內(nèi)容,轉(zhuǎn)化成duration字段。然后解析出一個IP格式的文本,轉(zhuǎn)換成client字段。而示例中使用的COMBINEDAPACHELOG則是針對APACHE服務器提供的一種通用的解析格式,對于解析Nginx日志同樣適用。

一條nginx的日志大概是這樣:

83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png
HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel
Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"

解析出來的是一個json格式的數(shù)據(jù),包含以下字段

Information Field Name
IP Address clientip
User ID ident
User Authentication auth
timestamp timestamp
HTTP Verb verb
Request body request
HTTP Version httpversion
HTTP Status Code response
Bytes served bytes
Referrer URL referrer
User agent agent

? 配置好這個文件后,就可以直接啟動了。

nohup bin/logstash -f config/logstash-sample.conf --config.reload.automatic &

config.reload.automatic表示配置自動更新,也就是說以后只要改動了配置文件,就會及時生效,不需要重啟logstash

nohup指令只是表示不要占據(jù)當前控制臺,將控制臺日志打印到nohup.out文件中。

logstash更詳細的配置說明參見官方文檔:https://www.elastic.co/guide/en/logstash/7.17

? 然后,搭建filebeat

? 之前已經(jīng)啟動了logstash服務,通過5044端口監(jiān)聽filebeat服務。接下來就需要在各個應用服務器上部署filebeat,往logstash發(fā)送日志消息即可。

? filebeat的下載地址: https://www.elastic.co/cn/downloads/past-releases#filebeat 。同樣選擇配套的7.17.3版本filebeat-7.17.3-linux-x86_64.tar.gz。并使用tar -zxvf filebeat-7.17.3-linux-x86_64.tar.gz指令解壓。

? 在解壓目錄下已經(jīng)提供了一個模版配置文件filebeat.yml,我們只需要修改這個文件即可。 這個模板文件里面的示例非常清楚,從文件讀取日志,輸出到logstash的配置,文件當中都有。這里只列出修改的部分。

? 先修改文件輸入的部分配置

# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: filestream
  # Change to true to enable this input configuration.
  enabled: true 
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /www/wwwlogs/access.log
    #- c:\programdata\elasticsearch\logs\*

? 然后修改輸出到logstash的部分配置

# ------------------------------ Logstash Output -------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.65.114:5044"]

默認打開的是output.elasticsearch,輸入到es,這部分配置要注釋掉。

? 這樣就完成了最簡單的filebeat配置。接下來啟動filebeat即可

nohup ./filebeat -e -c filebeat.yml -d "publish" &

? filebeat任務啟動后,就會讀取nginx的日志,一旦有新的日志記錄,就會將日志轉(zhuǎn)發(fā)到logstash,然后經(jīng)由logstash再轉(zhuǎn)發(fā)到ES中。并且filebeat對于讀取過的文件,都是有記錄的,即便文件改了名字也不會影響讀取的進度。比如對log日志,當前記錄的log文件,即便經(jīng)過日志輪換改成了其他的名字,讀取進度也不會有變化。而新生成的log日志也可以繼續(xù)從頭讀取內(nèi)容。如果需要清空filebeat的文件記錄,只需要刪除安裝目錄下的data/registry目錄即可。

更詳細的配置參見官方文檔: https://www.elastic.co/guide/en/beats/filebeat/7.17/logstash-output.html

? 接下來,進入ES查看數(shù)據(jù)是否生效

? 進入Kibana的前端頁面,即可查詢到nginxlog索引下的日志記錄

GitLab+Jenkins搭建DevOps一體化運維平臺

? 后續(xù)就可以針對這些nginx的日志信息,進行分析。nginx的日志基本上是所有大型項目進行日志收集必不可少的一個重要數(shù)據(jù)來源,從nginx的日志中可以分析出大量有用的結(jié)果。比如最常見的PV,UV,還有熱點功能等。

? 課上就只帶大家搭建最簡單的一組服務了。在搭建過程中可以看到,filebeat和logstash對于常見的輸入輸出源都已經(jīng)提供了實現(xiàn),大部分情況下,只需要簡單配置即可。在實際項目中,往往會以此為基礎構(gòu)建更復雜的分布式日志處理方案。 比如在logstash后增加一個Kafka,將LogStash收集的日志消息存入到kafka ,再經(jīng)過基于Kafka的流式計算,將PV,UV這類的統(tǒng)計結(jié)果存入ES。文章來源地址http://www.zghlxwxcb.cn/news/detail-488605.html

到了這里,關(guān)于GitLab+Jenkins搭建DevOps一體化運維平臺的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • JAVA開發(fā)運維(軟件一體化可觀測平臺的功能)

    JAVA開發(fā)運維(軟件一體化可觀測平臺的功能)

    軟件可觀測是軟件度量的一種。旨在對軟件的數(shù)字體驗、業(yè)務運營、網(wǎng)絡性能、應用性能、基礎設施、IT流程進行監(jiān)控和數(shù)據(jù)刻畫。使開發(fā)人員和運維人員更好的對軟件進行優(yōu)化維護。 一、數(shù)字體驗: 用戶會話 了解用戶使用路徑,追查使用過程中影響用戶體驗的慢請求、慢

    2024年02月05日
    瀏覽(27)
  • 監(jiān)控易一體化運維:打造機房環(huán)境監(jiān)控的卓越典范

    ? ? 隨著信息技術(shù)的飛速發(fā)展,機房作為企業(yè)數(shù)據(jù)和業(yè)務的中心,其運行狀態(tài)和管理的重要性日益凸顯。為確保機房的穩(wěn)定性和可靠性,越來越多的企業(yè)選擇使用一體化運維管理軟件來進行實時監(jiān)控。在這方面,監(jiān)控易品牌提供了一款全面而高效的機房環(huán)境實時監(jiān)控系統(tǒng)方案

    2024年02月08日
    瀏覽(20)
  • jenkins 打包cloud多模塊項目,一體化方案

    jenkins 打包cloud多模塊項目,一體化方案

    git 地址為整體結(jié)構(gòu) 未拆分 :? http://127.0.0.1:8888/gtilab/頂級父工程.git ? ???????? ? ?此篇主要關(guān)注jenkins 相關(guān)集成構(gòu)建,重點不在于 gitlab,harbor,rancher等環(huán)境的搭建 ? ?有空再補充吧,先搞個demo。 ? 2.2.1? 安裝 gitlab插件 安裝流水線相關(guān)插件;? 這些插件? 安裝的時候會引導安裝

    2024年02月03日
    瀏覽(20)
  • 智慧園區(qū)運維:1500路攝像頭故障監(jiān)控及多機房一體化運維

    一、引言 ? ? ? ?隨著智慧園區(qū)的快速發(fā)展,對園區(qū)內(nèi)IT設施的運維管理提出了更高的要求。本解決方案旨在滿足智慧園區(qū)對1500路攝像頭故障監(jiān)控及視頻畫面質(zhì)量分析的需求,同時具備可擴充性,適應未來園區(qū)規(guī)模的不斷擴大。通過監(jiān)控易的解決方案,我們將為智慧園區(qū)的運

    2024年02月02日
    瀏覽(20)
  • 模型預測筆記(一):數(shù)據(jù)清洗分析及可視化、模型搭建、模型訓練和預測代碼一體化和對應結(jié)果展示(可作為baseline)

    模型預測筆記(一):數(shù)據(jù)清洗分析及可視化、模型搭建、模型訓練和預測代碼一體化和對應結(jié)果展示(可作為baseline)

    KNNImputer的默認算法是基于K最近鄰算法來填充缺失值。具體步驟如下: 對于每個缺失值,找到其最近的K個鄰居樣本。 使用這K個鄰居樣本的非缺失值來計算缺失值的近似值??梢允褂镁怠⒅形粩?shù)或加權(quán)平均值等方法來計算近似值。 將計算得到的近似值填充到缺失值的位置。

    2024年02月12日
    瀏覽(24)
  • 閘控一體化解決方案(閘控一體化解決方案(閘門自動化控制系統(tǒng)介紹))

    閘控一體化解決方案(閘控一體化解決方案(閘門自動化控制系統(tǒng)介紹))

    ? 一、整體技術(shù)架構(gòu) 星創(chuàng)易聯(lián)智慧水利解決方案主要包括水閘控制系統(tǒng)、水情監(jiān)測系統(tǒng)、通信網(wǎng)絡系統(tǒng)、管理軟件平臺四個層面。各系統(tǒng)通過標準化接口和協(xié)議相連,實現(xiàn)信息融合: - 水閘控制系統(tǒng):采用智能水閘控制器,實現(xiàn)對水閘的遠程監(jiān)控與操作控制。 - 水情監(jiān)測系統(tǒng):通過

    2024年01月19日
    瀏覽(26)
  • 智慧社區(qū)一體化管理

    智慧社區(qū)一體化管理

    智慧社區(qū)是社區(qū)管理的一種新理念,是新形勢下社會管理創(chuàng)新的一種新模式。充分利用物聯(lián)網(wǎng)、云計算、移動互聯(lián)網(wǎng)等新一代信息技術(shù)的集成應用,為社區(qū)居民提供一個安全、舒適、便利的現(xiàn)代化、智慧化生活環(huán)境,從而形成基于信息化、智能化社會管理與服務的一種新的管理

    2023年04月08日
    瀏覽(28)
  • 計算機基礎一體化教程(習題)

    第一章 1.按照計算機的構(gòu)成元件,電子計算機應劃分為哪幾個發(fā)展階段? ??? 一,電子管 ??? 二,晶體管 ??? 三,中小規(guī)模集成電路 ??? 四,大規(guī)模和超大規(guī)模集成電路 2.計算機有什么特點?應用領(lǐng)域有哪些? ?????? 計算精度高,計算速度快,存儲容量大,自動化。

    2023年04月18日
    瀏覽(31)
  • 一體化個人門戶Web Portal

    一體化個人門戶Web Portal

    什么是 Web Portal ? Web Portal 是一個一體化的 Web 儀表板,提供許多小部件來構(gòu)建個人門戶。具有加載外部插件的能力。對于那些只需要鏈接儀表板并希望使用 yaml 配置它的人來說, Lite 版是一個精簡版本。 如果你不想自己構(gòu)建,可以跳過,直接閱讀下一章節(jié) 構(gòu)建服務端鏡像的

    2024年02月11日
    瀏覽(27)
  • 大數(shù)據(jù)流批一體化架構(gòu)設計

    1、當前生產(chǎn)環(huán)境因source端數(shù)據(jù)更改,導致后續(xù)計算重新運行情況時有發(fā)生,這樣不僅牽扯開發(fā)精力而且十分消耗資源。 2、現(xiàn)有的數(shù)據(jù)處理方式不能更好的面向未來日益增多的需求。 3、業(yè)務線數(shù)據(jù)模型混亂,數(shù)據(jù)使用成本特別高。 4、需求驅(qū)動的煙囪式開發(fā),完全沒有復用的

    2024年02月14日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包