本文講解如何通過(guò)一套開源日志存儲(chǔ)和檢索系統(tǒng) ELK 構(gòu)建 MySQL 慢日志收集及分析平臺(tái)。
創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元錦江做網(wǎng)站,已為上家服務(wù),為錦江各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
ELK、EFK 簡(jiǎn)介
想必你對(duì) ELK、EFK 都不陌生,它們有一個(gè)共同的組件:Elasticsearch(簡(jiǎn)稱ES),它是一個(gè)實(shí)時(shí)的全文搜索和分析引擎,可以提供日志數(shù)據(jù)的收集、分析、存儲(chǔ) 3 大功能。另外一個(gè)組件 Kibana 是這套檢索系統(tǒng)中的 Web 圖形化界面系統(tǒng),可視化展示在 Elasticsearch 的日志數(shù)據(jù)和結(jié)果。
ELF/EFK 工具集中還有 l 和 F 這兩個(gè)名稱的縮寫,這兩個(gè)縮寫代表的工具根據(jù)不同的架構(gòu)和使用方式而定。
L 通常是 Logstash 組件,它是一個(gè)用來(lái)搜集、分析、過(guò)濾日志的工具 。
F 代表 Beats 工具(它是一個(gè)輕量級(jí)的日志采集器),Beats 家族有 6 個(gè)成員,F(xiàn)ilebeat 工具,它是一個(gè)用于在客戶端收集日志的輕量級(jí)管理工具。
F 也可以代表工具 fluentd,它是這套架構(gòu)里面常用的日志收集、處理轉(zhuǎn)發(fā)的工具。
那么它們(Logstash VS Beats VS fluentd)有什么樣的區(qū)別呢?Beats 里面是一個(gè)工具集,其中包含了 Filebeat 這樣一個(gè)針對(duì)性的日志收集工具。Logstash 除了做日志的收集以外,還可以提供分析和過(guò)濾功能,所以它的功能會(huì)更加的強(qiáng)大。
Beats 和 fluentd 有一個(gè)共同的特點(diǎn),就是輕量級(jí),沒(méi)有 Logstash 功能全面。但如果比較注重日志收集性能,Beats 里面的 Filebeat 和 fluentd 這兩個(gè)工具會(huì)更有優(yōu)勢(shì)。
Kafka 是 ELK 和 EFK 里面一個(gè)附加的關(guān)鍵組件(縮寫 K),它主要是在支持高并發(fā)的日志收集系統(tǒng)里面提供分布式的消息隊(duì)列服務(wù)。
ELK 的優(yōu)勢(shì)
在此之前,先介紹 ELK 日志分析會(huì)有一些什么樣的優(yōu)勢(shì)?主要有 3 點(diǎn):
1、它是一套開源、完整的日志檢索分析系統(tǒng),包含收集、存儲(chǔ)、分析、檢索工具。我們不需要去開發(fā)一些額外的組件去完成這套功能,因?yàn)樗J(rèn)的開源方式就提供了一整套組件,只要組合起來(lái),就可以完成從日志收集、檢索、存儲(chǔ)、到整個(gè)展示的完整解決方案了。
2、支持可視化的數(shù)據(jù)瀏覽。運(yùn)維人員只要在控制臺(tái)里選擇想關(guān)注的某一段時(shí)間內(nèi)的數(shù)據(jù),就可以查看相應(yīng)的報(bào)表,非??旖莺头奖?。
3、它能廣泛的支持一些架構(gòu)平臺(tái),比如我們現(xiàn)在講到的 K8s 或者是云原生的微服務(wù)架構(gòu)。
Kafka 作為日志消息隊(duì)列,客戶端通過(guò) Filebeat 收集數(shù)據(jù)(日志)后將其先存入 Kafka,然后由 Logstash 提取并消費(fèi),這套架構(gòu)的好處是:當(dāng)我們有海量日志同步情況下,直接存入服務(wù)端 ES 很難直接應(yīng)承接海量流量,所以 Kafka 會(huì)進(jìn)行臨時(shí)性的存取和緩沖,再由 Logstash 進(jìn)行提取、過(guò)濾,通過(guò) Logstash 以后,再把滿足條件的日志數(shù)據(jù)存入 ES。
ES 不再是以單實(shí)例的方部署,而是采用集群架構(gòu),考慮 Kafka 的集群模式, Logstash 也使用集群模式。
我們會(huì)看到這套架構(gòu)稍微龐大,大中型的企業(yè)往往存儲(chǔ)海量數(shù)據(jù)(上百 T 或 P 級(jí))運(yùn)維日志、或者是系統(tǒng)日志、業(yè)務(wù)日志。
完成ELK服務(wù)搭建后,首先我需要開啟的是 MySQL 的慢查詢配置,那么通過(guò) set global slow_query_log=‘ON‘,這樣就可以開啟慢查詢?nèi)罩荆€需要設(shè)置好慢查詢?nèi)罩緲?biāo)準(zhǔn)是大于 1 秒的,那么同樣是 set global long_query_time 大于或等于 1,它的意思是大于 1 秒的查詢語(yǔ)句,才會(huì)認(rèn)為是慢查詢,并且做日志的記錄。
那么另外還要設(shè)置慢查詢?nèi)罩镜奈恢?,通過(guò) set global slow_query_log = 日志文件路徑,這里設(shè)置到 filebeat 配置監(jiān)聽(tīng)的路徑下,就完成了慢查詢?nèi)罩镜穆窂皆O(shè)置。
配置完成以后,需要在 MySQL 終端上,模擬執(zhí)行一條執(zhí)行時(shí)間較長(zhǎng)的語(yǔ)句,比如執(zhí)行 select sleep(5),這樣就會(huì)模擬執(zhí)行一條查詢語(yǔ)句,并且會(huì)讓它休眠 5 秒。接下來(lái)我們看到服務(wù)端窗口的 MySQL 這條 sleep 語(yǔ)句已經(jīng)執(zhí)行完畢了,同時(shí)我們可以再打開 filebeat 的推送窗口,發(fā)現(xiàn)這里產(chǎn)生了一條推送日志,表示成功地把這條日志推送給了 ES。
那么接下來(lái)我們就可以通過(guò)瀏覽器打開 Kibana 的管理后臺(tái),從界面里來(lái)看一看檢索日志的記錄和一些可視化展示的圖表,我們可以點(diǎn)擊界面上的 Discover 按鈕,同時(shí)選擇好對(duì)應(yīng)的時(shí)間周期,然后可以增加一個(gè) filter 過(guò)濾器,過(guò)濾器里面敲入對(duì)應(yīng)的關(guān)鍵字來(lái)進(jìn)行索引。
這里我敲入的是 slow.query 這個(gè)關(guān)鍵字,就會(huì)匹配出對(duì)應(yīng)的可以檢索的項(xiàng)目,點(diǎn)擊想要查詢的對(duì)應(yīng)項(xiàng)目,展示出想檢索的某一個(gè)時(shí)間周期內(nèi)對(duì)應(yīng)的一些日志記錄,以及它的圖表是什么樣子的,同時(shí)在下方會(huì)有對(duì)應(yīng)的 MySQL 的日志信息打印出來(lái),通過(guò) Kibana 這樣的可視化界面就能夠看到的相關(guān)信息了。
在MySQL日常運(yùn)維工作中,經(jīng)常會(huì)用到各種管理工具,這些工具屬于mysql自帶的管理工具,存儲(chǔ)在mysql目錄下的bin目錄中,例如對(duì)象查看,備份,日志分析等,熟練使用是運(yùn)維開發(fā)人員的必備工作,這些工具參數(shù)很多,這里介紹常用選項(xiàng),更多詳細(xì)可參考幫助文件。
在mysql工具集中,管理員使用最頻繁的就是mysql命令了,它是連接數(shù)據(jù)庫(kù)的客戶端工具,類似oracle中的sqlplus,通過(guò)它可以進(jìn)入mysql控制臺(tái)界面。在大部分情況下,使用簡(jiǎn)單,命令語(yǔ)法如下:
常用選項(xiàng):選項(xiàng)一般有兩種表達(dá)方式,一種是"-"+選項(xiàng)單詞縮寫和選項(xiàng)值;另一種是“--”+選項(xiàng)的完整單詞“=”選項(xiàng)實(shí)際值。例如我們連接數(shù)據(jù)庫(kù)的兩種命令如下:
myisampack是一個(gè)表壓縮工具,它對(duì)MyISAM存儲(chǔ)引擎表能進(jìn)行高度壓縮,可以很大的節(jié)省磁盤空間,但是壓縮后的表只能讀,不能寫,不能進(jìn)行DML操作,所以它的使用場(chǎng)景一般是歸檔 歷史 數(shù)據(jù)。命令如下:
當(dāng)對(duì)一個(gè)壓縮表進(jìn)行增加操作時(shí)會(huì)報(bào)一個(gè)錯(cuò)誤:ERROR 1036 Table is read only,但時(shí)對(duì)查詢和統(tǒng)計(jì)時(shí)可以正常操作的。
mysqladmin是一個(gè)對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理操作的客戶端工具,可用來(lái)檢查服務(wù)器是否可用、顯示數(shù)據(jù)庫(kù)版本號(hào)和狀態(tài),還可以直接新增一個(gè)數(shù)據(jù)庫(kù),也可對(duì)數(shù)據(jù)庫(kù)進(jìn)行關(guān)閉,功能和mysql類似,它的參數(shù)和mysql差異不大,命令如下:
它還可以修改root密碼,命令如下
MySQL自帶的mysqlbinlog工具的作用是解析二進(jìn)制binlog的日志內(nèi)容,把二進(jìn)制數(shù)據(jù)還原成mysql可以執(zhí)行的SQL語(yǔ)句。我有篇文章專門介紹該工具的使用,請(qǐng)具體參考:
傳送門:mysql運(yùn)維管理(七):使用Mysqlbinlog工具恢復(fù)增量數(shù)據(jù)
mysqlcheck工具可以用來(lái)檢查和修復(fù)MyISAM存儲(chǔ)引擎的表,還能做優(yōu)化的工作,例如check、repair、analyze、optimize等等功能。具體命令如下:
注意,如果是innodb引擎的表,不能用上述優(yōu)化工具。
mysqldump工具用來(lái)邏輯備份數(shù)據(jù)庫(kù),或者數(shù)據(jù)遷移。該工具是最常用的備份工具。
我有篇文章專門介紹該工具的使用,請(qǐng)具體參考:
傳送門:mysql運(yùn)維管理(五):掌握MySQLdump邏輯備份工具使用
它是數(shù)據(jù)導(dǎo)入工具,專門用來(lái)處理mysqldump 加-T選項(xiàng)后導(dǎo)出的文本文件,基本用法很簡(jiǎn)單,命令如下:
客戶端對(duì)象查找工具,用來(lái)查找數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的表,表中列或者索引,具體使用命令如下:
不加任何選項(xiàng),默認(rèn)顯示所有數(shù)據(jù)庫(kù)。
常用參數(shù):
--count ,用來(lái)顯示數(shù)據(jù)庫(kù)和表的統(tǒng)計(jì)信息,不指定數(shù)據(jù)庫(kù)的話,顯示所有庫(kù)信息
-k或者--keys,用來(lái)顯示指定表中所有索引,例如查看employees庫(kù)中employees表的索引信息,
在使用mysql使用過(guò)程中,會(huì)經(jīng)常出現(xiàn)錯(cuò)誤,錯(cuò)誤信息都會(huì)帶有一個(gè)編碼,具體編碼代表什么意思,就需要perror來(lái)查看。用法很簡(jiǎn)單:
舉個(gè)例子,我們故意寫錯(cuò)一個(gè)查詢語(yǔ)句,例如:
現(xiàn)在有一個(gè)編碼1054,我們可以用perror查看下
結(jié)果跟用工具顯示的內(nèi)容差不多,當(dāng)然第三方工具也會(huì)顯示錯(cuò)誤信息。
本章做了一個(gè)常用工具的使用匯總,并舉例說(shuō)明了基本用法,熟練使用是每個(gè)運(yùn)維人員必修內(nèi)容,當(dāng)然還有很多參數(shù)沒(méi)有一一列舉,可以參考相關(guān)幫助文檔。
云運(yùn)維涉及的方面比較廣,基礎(chǔ)知識(shí)仍然是必不可少:Linux基礎(chǔ),基本linux命令的使用,Shell腳本編程,Linux操作系統(tǒng)知識(shí)(Ubuntu,CentOS系統(tǒng)等)。
了解完基礎(chǔ)知識(shí)后,可以給自己確定下方向:
1、大數(shù)據(jù)方向: 涉及Hadoop(hdfs,yarn等),spark,hbase,hive,storm等知識(shí)
2、虛擬化技術(shù):openstack,kvm,nova,docker,vmware,xen等
3、應(yīng)用:mysql,redis,memcached,sqlserver
4、對(duì)目前的云提供商的業(yè)務(wù)的了解:阿里云,騰訊云,京東云,金山云,AWS等
5、腳本開發(fā)(DevOps必備):python,ruby
6、比較常用的運(yùn)維工具:jenkins,chef,puppet,ansible等
可以每項(xiàng)都了解下,最好選擇幾個(gè),多做實(shí)踐。
公司系統(tǒng)就用了很多種數(shù)據(jù)庫(kù)MySQL、SQL sever、Oracle、MariaDB,基礎(chǔ)架構(gòu)使用大廠云的IAAS平臺(tái),但是數(shù)據(jù)庫(kù)的運(yùn)維管理需要自己做。我們?nèi)ツ昱艘惶走h(yuǎn)光的YGdata,運(yùn)維方便了很多。提供統(tǒng)一RDS支撐平臺(tái),即開即用、性能卓越,運(yùn)行比較穩(wěn)定,沒(méi)有出現(xiàn)過(guò)故障,運(yùn)維團(tuán)隊(duì)整體專業(yè)性都能大大提高了,給領(lǐng)導(dǎo)的各類報(bào)告也特別容易,而且好看多了。