0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

小團(tuán)隊(duì)如何從零搭建一個(gè)自動(dòng)化運(yùn)維體系?

馬哥Linux運(yùn)維 ? 來源:lq ? 2019-05-16 10:18 ? 次閱讀

行業(yè)內(nèi)各巨頭的自動(dòng)化運(yùn)維架構(gòu)都各種功能,各種酷炫,讓人可望不可及。

如下圖,現(xiàn)在行業(yè)內(nèi)各巨頭自動(dòng)化運(yùn)維架構(gòu)的最終樣子大家都知道了,但是如何根據(jù)自己團(tuán)隊(duì)當(dāng)前的情況一步步向這個(gè)目標(biāo)演進(jìn)?

筆者所在團(tuán)隊(duì),三個(gè)半開發(fā),要維護(hù)幾十臺(tái)云機(jī)器,部署了十來個(gè)應(yīng)用,這些應(yīng)用 90% 都是遺留系統(tǒng)。

應(yīng)用系統(tǒng)的編譯打包基本在程序員自己的電腦上。分支管理也清一色的 dev 分支開發(fā),測試通過后,再合并到 master 分支。

生產(chǎn)環(huán)境的應(yīng)用配置要登錄上具體的機(jī)器看才知道,更不用說配置中心及配置版本化了。對了,連基本的機(jī)器級別的基礎(chǔ)監(jiān)控都沒有。

我平時(shí)的工作是 50% 業(yè)務(wù)開發(fā),50% 運(yùn)維。面對這么多問題,我就想,如何在低成本情況下實(shí)現(xiàn)自動(dòng)化運(yùn)維。

本文就是總結(jié)我在這方面一些經(jīng)驗(yàn)和實(shí)踐,希望對讀者有幫助。

別說話,先上監(jiān)控和告警

事情有輕重緩急,監(jiān)控和告警是我覺得一開始就要做的,即使業(yè)務(wù)開發(fā)被拖慢。只有知道了當(dāng)前的情況,你才好做下一步計(jì)劃。

現(xiàn)在市面上監(jiān)控系統(tǒng)很多:Zabbix、Open-Falcon、Prometheus,但是最終我選擇了 Prometheus。

原因有如下幾點(diǎn):

它是拉模式的。

它方便使用文本方式來配置,有利于配置版本化。

插件多,想要監(jiān)控什么,基本都會(huì)有現(xiàn)成的插件。

以上三者,我基本都要重新學(xué),我為什么不學(xué)一個(gè) Google SRE 書上推薦的呢?

之前我們已經(jīng)介紹過,人少機(jī)器多,所以安裝 Prometheus 的過程也必須要自動(dòng)化,同時(shí)版本化。我使用的是 Ansible + Git 實(shí)現(xiàn)。

最終樣子如下:

這里需要簡單介紹一下:

Prometheus Server 負(fù)責(zé)監(jiān)控?cái)?shù)據(jù)收集和存儲(chǔ)。

Prometheus Alert manager 負(fù)責(zé)根據(jù)告警規(guī)則進(jìn)行告警,可集成很多告警通道。

node-exporter[1] 的作用就是從機(jī)器讀取指標(biāo),然后暴露一個(gè) http 服務(wù),Prometheus 就是從這個(gè)服務(wù)中收集監(jiān)控指標(biāo)。當(dāng)然 Prometheus 官方還有各種各樣的 exporter。

使用 Ansible 作為部署工具的一個(gè)好處是太多現(xiàn)成的 role 了,安裝 Prometheus 時(shí),我使用的是現(xiàn)成的:prometheus-ansble[2]。

有了監(jiān)控?cái)?shù)據(jù)后,我們就可以對數(shù)據(jù)進(jìn)行可視化,Grafana 和 Prometheus 集成得非常好,所以我們又部署了 Grafana:

在 Grafana 上查看 nodex-exporter 收集的數(shù)據(jù)的效果圖大概如下:

可是,我們不可能 24 小時(shí)盯著屏幕看 CPU 負(fù)載有沒有超吧?這時(shí)候就要上告警了,Promehtues 默認(rèn)集成了 N 多告警渠道,可惜沒有集成釘釘。

但也沒有關(guān)系,有好心的同學(xué)開源了釘釘集成 Prometheus 告警的組件:prometheus-webhook-dingtalk[3]。

接著,我們告警也上了:

完成以上工作后,我們基礎(chǔ)監(jiān)控的架子就完成了,這為我們后期上 Redis 監(jiān)控、JVM 監(jiān)控等更上層的監(jiān)控做好了準(zhǔn)備。

配置版本化要從娃娃抓起

在搭建監(jiān)控系統(tǒng)的過程中,我們已經(jīng)將配置抽離出來,放到一個(gè)單獨(dú)的代碼倉庫進(jìn)行管理。以后所有部署,我們都會(huì)將配置和部署邏輯分離。

關(guān)于如何使用 Ansible 進(jìn)行配置管理,可以參考這篇文章:How to Manage Multistage Environments with Ansible[4] 。

我們就是使用這種方式來組織環(huán)境變量的。

├── environments/ # Parent directory for our environment-specific directories│ ││ ├── dev/ # Contains all files specific to the dev environment│ │ ├── group_vars/ # dev specific group_vars files│ │ │ ├── all│ │ │ ├── db│ │ │ └── web│ │ └── hosts # Contains only the hosts in the dev environment│ ││ ├── prod/ # Contains all files specific to the prod environment│ │ ├── group_vars/ # prod specific group_vars files│ │ │ ├── all│ │ │ ├── db│ │ │ └── web│ │ └── hosts # Contains only the hosts in the prod environment│ ││ └── stage/ # Contains all files specific to the stage environment│ ├── group_vars/ # stage specific group_vars files│ │ ├── all│ │ ├── db│ │ └── web│ └── hosts # Contains only the hosts in the stage environment│

現(xiàn)階段,我們所有的配置都以文本的方式存儲(chǔ),將來要切換成使用 Consul 做配置中心,也非常的方便,因?yàn)?Ansible 2.0 以上的版本已經(jīng)原生集成了Consul:consul_module[5]。

Tips:Ansible 的配置變量是有層次的,這為我們的配置管理提供了非常大的靈活性。

Jenkins 化:將打包交給 Jenkins

我們要將所有項(xiàng)目的打包工作交給 Jenkins。當(dāng)然,現(xiàn)實(shí)中我們是先將一些項(xiàng)目放到 Jenkins 上打包,然后逐步將項(xiàng)目放上 Jenkins。

首先我們要有 Jenkins,搭建 Jenkins 同樣有現(xiàn)成的 Ansible 腳本:ansible-role-jenkins[6]。

注意了,在網(wǎng)上看到的大多文章告訴你 Jenkins 都是需要手工安裝插件的,而我們使用的這個(gè) ansible-role-jenkins 實(shí)現(xiàn)了自動(dòng)安裝插件,你只需要加一個(gè)配置變量 jenkins_plugins 就可以了。

官方例子如下:

---- hosts: all vars: jenkins_plugins: - blueocean - ghprb - greenballs - workflow-aggregator jenkins_plugin_timeout: 120 pre_tasks: - include_tasks: java-8.yml roles: - geerlingguy.java - ansible-role-jenkins

搭建好 Jenkins 后,就要集成 Gitlab 了。我們原來就有 Gitlab ,所以不需要重新搭建。

最終 Jenkins 搭建成以下這個(gè)樣子:

關(guān)于 Jenkins master 與 Jenkins agent 的連接方式,由于網(wǎng)絡(luò)環(huán)境各不相同,網(wǎng)上也有很多種方式,大家自行選擇適合的方式。

現(xiàn)在我們需要告訴 Jenkins 如何對我們的業(yè)務(wù)代碼進(jìn)行編譯打包,有兩種方法:

界面上設(shè)置

使用 Jenkinsfile:類似于 Dockerfile 的一種文本文件,具體介紹:Using a Jenkinsfile[7]

我毫不猶豫地選擇了第二種,因?yàn)橐皇抢诎姹净?;二是靈活。

Jenkinsfile 類似這樣:

pipeline { agent any stages { stage('Build') { steps { sh './gradlew clean build' archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true } } }}

那么 Jenkinsfile 放哪里呢?答案是和業(yè)務(wù)代碼放在一起,類似這樣每個(gè)工程各自管理自己的 Jenkinsfile:

這時(shí),我們就可以在 Jenkins 上創(chuàng)建一個(gè) pipleline Job了。關(guān)于分支管理,我們?nèi)松?,所以,建議所有項(xiàng)目統(tǒng)一在 master 分支進(jìn)行開發(fā)并發(fā)布。

讓 Jenkins 幫助我們執(zhí)行 Ansible

之前我們都是在程序員的電腦執(zhí)行 Ansible 的,現(xiàn)在我們要把這項(xiàng)工作交給 Jenkins。

具體操作:

在 Jenkins 安裝 Ansible 插件[8]

在 Jenkinsfile 中執(zhí)行

withCredentials([sshUserPrivateKey(keyFileVariable:"deploy_private",credentialsId:"deploy"),file(credentialsId: 'vault_password', variable: 'vault_password')]) { ansiblePlaybook vaultCredentialsId: 'vault_password', inventory: "environments/prod", playbook: "playbook.yaml", extraVars:[ ansible_ssh_private_key_file: [value: "${deploy_private}", hidden: true], build_number: [value: "${params.build_number}", hidden: false] ]}

這里需要解釋下:

ansiblePlaybook 是 Jenkins ansible 插件提供的 pipeline 語法,類似手工執(zhí)行:ansible-playbook 。

withCredentials 是 Credentials Binding[9] 插件的語法,用于引用一些敏感信息,比如執(zhí)行 Ansible 時(shí)需要的 ssh key 及 Ansible Vault 密碼。

一些敏感配置變量,我們使用 Ansible Vault[10] 技術(shù)加密。

Ansible 腳本應(yīng)該放哪?

我們已經(jīng)知道各個(gè)項(xiàng)目各自負(fù)責(zé)自己的自動(dòng)化構(gòu)建,所以 Jenkinfile 就放到各自項(xiàng)目中。

那項(xiàng)目的部署呢?同樣的道理,我們覺得也應(yīng)該由各個(gè)項(xiàng)目自行負(fù)責(zé),所以我們的每個(gè)要進(jìn)行部署的項(xiàng)目下都會(huì)有一個(gè) Ansible 目錄,用于存放 Ansible 腳本。

類似這樣:

但是,怎么用呢?我們會(huì)在打包階段將 Ansible 目錄進(jìn)行 zip 打包,到真正部署時(shí),再解壓執(zhí)行里面的 playbook。

快速為所有的項(xiàng)目生成 Ansible 腳本及Jenkinsfile

上面,我們將一個(gè)項(xiàng)目進(jìn)行 Jenkins 化和 Ansible 化,但是我們還有很多項(xiàng)目需要進(jìn)行同樣的動(dòng)作。

考慮到這是體力活,而且以后我們還會(huì)經(jīng)常做這樣事,所以我決定使用 cookiecutter[11] 技術(shù)自動(dòng)生成 Jenkinsfile 及 Ansible 腳本,創(chuàng)建一個(gè)項(xiàng)目,像這樣:

小結(jié)

總結(jié)下來,我們小團(tuán)隊(duì)的自動(dòng)化運(yùn)維實(shí)施的順序大概為:

上基礎(chǔ)監(jiān)控

上 Gitlab

上 Jenkins,并集成 Gitlab

使用 Jenkins 實(shí)現(xiàn)自動(dòng)編譯打包

使用 Jenkins 執(zhí)行 Ansible

以上只是一個(gè)架子,基于這個(gè)“架子”,就可以向那些大廠高大上的架構(gòu)進(jìn)行演進(jìn)了,比如:

CMDB 的建設(shè):我們使用 ansible-cmdb[12] 根據(jù) inventory 自動(dòng)生成當(dāng)前所有機(jī)器的情況。

發(fā)布管理:Jenkins 上可以對發(fā)布的每個(gè)階段進(jìn)行定制。藍(lán)綠發(fā)布等發(fā)布方式可以通過修改 Ansible 腳本和 Inventory 實(shí)現(xiàn)。

自動(dòng)擴(kuò)縮容:通過配置 Prometheus 告警規(guī)則,調(diào)用相應(yīng) webhook 就可以實(shí)現(xiàn)。

ChatOps:ChatOps 實(shí)戰(zhàn)[13]。

以上就是我關(guān)于自動(dòng)化運(yùn)維的一些實(shí)踐,但是還在演進(jìn)的路上,希望能與大家交流。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 監(jiān)控系統(tǒng)

    關(guān)注

    21

    文章

    3933

    瀏覽量

    175670
  • 自動(dòng)化
    +關(guān)注

    關(guān)注

    29

    文章

    5599

    瀏覽量

    79460
  • 機(jī)器
    +關(guān)注

    關(guān)注

    0

    文章

    784

    瀏覽量

    40765

原文標(biāo)題:超實(shí)用:小團(tuán)隊(duì)如何從零搭建一個(gè)自動(dòng)化運(yùn)維體系?

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    普及跑腿到云一體化IT運(yùn)管理的常識(shí)

    普及跑腿到云一體化IT運(yùn)管理的常識(shí)運(yùn)
    發(fā)表于 06-22 14:28

    誠聘高級運(yùn)自動(dòng)化工程師

    、熟悉大型互聯(lián)網(wǎng)企業(yè)運(yùn)自動(dòng)化體系,了解包含CMDB、監(jiān)控、部署、自動(dòng)化檢查等各類系統(tǒng)的架構(gòu)和常見解決方案,有實(shí)際規(guī)劃
    發(fā)表于 12-12 10:37

    銳捷助互聯(lián)網(wǎng)數(shù)據(jù)中心網(wǎng)絡(luò)自動(dòng)化、可視運(yùn)

    吉朋表示,集中在網(wǎng)絡(luò)虛擬,以及自動(dòng)化、可視運(yùn)上。當(dāng)前,互聯(lián)網(wǎng)業(yè)務(wù)快速發(fā)展,服務(wù)器數(shù)量激增,要求基礎(chǔ)網(wǎng)絡(luò)快速交付,支撐業(yè)務(wù)快速上線,同時(shí)
    發(fā)表于 01-25 09:42

    【深圳】誠聘運(yùn)開發(fā)工程師

    、自動(dòng)化運(yùn)平臺(tái)、負(fù)載均衡、調(diào)度系統(tǒng)開發(fā)經(jīng)驗(yàn)者優(yōu)先;6. 理解HTTP/HTTPS、DNS、LDAP等常見服務(wù)原理;7. 熟悉Ansible等自動(dòng)化配置工具的使用和擴(kuò)展開發(fā);8. 積極
    發(fā)表于 07-04 14:34

    虛擬故障怎么辦?虛擬運(yùn)怎么解決?

    運(yùn)人員的投入。業(yè)務(wù)健康以最終用戶體驗(yàn)和應(yīng)用響應(yīng)時(shí)間的形式來衡量。如果最終用戶不斷抱怨應(yīng)用運(yùn)行緩慢,那就是個(gè)問題。云安的可視窗口,透視虛擬架構(gòu),可以讓
    發(fā)表于 02-21 21:32

    ansible-first-book 自動(dòng)化運(yùn)工具

    ansible-first-book 自動(dòng)化運(yùn)工具
    發(fā)表于 09-08 09:31 ?5次下載

    配電自動(dòng)化實(shí)用運(yùn)指標(biāo)研究

    根據(jù)《配電自動(dòng)化實(shí)用化驗(yàn)收細(xì)則》中對配電自動(dòng)化運(yùn)考核要求,重點(diǎn)圍繞終端在線率、遙信動(dòng)作正確率、遙控使用率與遙控成功率四項(xiàng)指標(biāo)進(jìn)行考核。目前對配電
    發(fā)表于 03-05 14:55 ?0次下載

    厲害了!山東電力運(yùn)自動(dòng)化平臺(tái)正式投運(yùn)

    日前,國網(wǎng)山東省電力集團(tuán)公司通過了山東信息通信技術(shù)監(jiān)督裝備及運(yùn)支撐工具開發(fā)實(shí)施項(xiàng)目的驗(yàn)收,代表著運(yùn)自動(dòng)化平臺(tái)正式投
    發(fā)表于 04-30 11:18 ?4455次閱讀

    Ansible企業(yè)級自動(dòng)化運(yùn)探索的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Ansible企業(yè)級自動(dòng)化運(yùn)探索的詳細(xì)資料說明主要內(nèi)容包括了:場景自動(dòng)化
    發(fā)表于 06-03 08:00 ?2次下載
    Ansible企業(yè)級<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>運(yùn)</b><b class='flag-5'>維</b>探索的詳細(xì)資料說明

    城域網(wǎng)自動(dòng)化運(yùn)實(shí)現(xiàn)的關(guān)鍵點(diǎn)、難點(diǎn)和解決方案研究

      針對城域網(wǎng)運(yùn)自動(dòng)化水平較低、人工成本高且無法擺脫重復(fù)運(yùn)勞動(dòng)的現(xiàn)狀,本文探討了當(dāng)前城域網(wǎng)自動(dòng)化
    發(fā)表于 10-28 09:09 ?2640次閱讀
    城域網(wǎng)<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>運(yùn)</b><b class='flag-5'>維</b>實(shí)現(xiàn)的關(guān)鍵點(diǎn)、難點(diǎn)和解決方案研究

    城域網(wǎng)是什么,其生命周期和自動(dòng)化運(yùn)應(yīng)用有哪些特點(diǎn)

    Labs 摘? 要針對城域網(wǎng)運(yùn)自動(dòng)化水平較低、人工成本高且無法擺脫重復(fù)運(yùn)勞動(dòng)的現(xiàn)狀,本文探討了當(dāng)前城域網(wǎng)
    的頭像 發(fā)表于 12-25 14:24 ?1132次閱讀

    使用Python腳本實(shí)現(xiàn)自動(dòng)化運(yùn)任務(wù)

    許多運(yùn)工程師會(huì)使用 Python 腳本來自動(dòng)化運(yùn)任務(wù)。Python 是種流行的編程語言,具有豐富的第三方庫和強(qiáng)大的
    的頭像 發(fā)表于 04-08 10:36 ?1721次閱讀

    DevOps流水線自動(dòng)化和優(yōu)化

    JFrogPipelines 通過在所有團(tuán)隊(duì)和工具中以持續(xù)簡化和安全的方式實(shí)現(xiàn)DevOps 自動(dòng)化運(yùn)流程,使軟件團(tuán)隊(duì)能夠更快地發(fā)布更新情況
    的頭像 發(fā)表于 04-21 10:23 ?1510次閱讀

    網(wǎng)絡(luò)設(shè)備自動(dòng)化運(yùn)工具—ansible入門筆記介紹

    Ansible是自動(dòng)化運(yùn)工具,基于Python開發(fā),集合了眾多運(yùn)工具 (Puppet、CFengine、Chef、SaltStack
    的頭像 發(fā)表于 01-15 13:46 ?2037次閱讀
    網(wǎng)絡(luò)設(shè)備<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>運(yùn)</b><b class='flag-5'>維</b>工具—ansible入門筆記介紹

    人工到自動(dòng)化到AIOps再到ChatOps:大模型在運(yùn)領(lǐng)域的應(yīng)用

    、引言 在信息技術(shù)飛速發(fā)展的今天,運(yùn)工作已經(jīng)最初的人工操作,逐步演變?yōu)?b class='flag-5'>自動(dòng)化、AIOps(人工智能
    的頭像 發(fā)表于 07-01 18:00 ?565次閱讀
    <b class='flag-5'>從</b>人工到<b class='flag-5'>自動(dòng)化</b>到AIOps再到ChatOps:大模型在運(yùn)<b class='flag-5'>維</b>領(lǐng)域的應(yīng)用