作者:飛走不可
一、寫(xiě)在前面
結(jié)合之前寫(xiě)的一篇文章:Centos7 之安裝Logstash ELK stack 日志管理系統(tǒng),上篇文章主要講了監(jiān)控軟件的作用以及部署方法。而這篇文章介紹的是單獨(dú)監(jiān)控nginx 日志分析再進(jìn)行可視化圖形展示,并在用戶前端使用nginx 來(lái)代理kibana的請(qǐng)求響應(yīng),訪問(wèn)權(quán)限方面暫時(shí)使用HTTP 基本認(rèn)證加密用戶登錄。(關(guān)于elk權(quán)限控制,我所了解的還有一種方式-Shield),等以后有時(shí)間了去搞下。下面開(kāi)始正文吧。。。
注意:環(huán)境默認(rèn)和上一篇大致一樣,默認(rèn)安裝好了E、L、K、3個(gè)軟件即可。當(dāng)然了,還有必需的java環(huán)境JDK
開(kāi)始之前,請(qǐng)?jiān)试S我插入一張圖,來(lái)自線上我的測(cè)試圖:(如果有需要的童鞋,可以私信我,我可以把登錄帳號(hào)給你。。)
備注:由于阿里云主機(jī)已經(jīng)刪除,無(wú)法提供試看了哈。
nginx日志文件其中一行:
218.75.177.193 - - [03/Sep/2016:03:34:06 +0800] "POST /newRelease/everyoneLearnAjax HTTP/1.1" 200 370 "http://www.xxxxx.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" "36.22.6.130"
nginx 服務(wù)器日志的log_format格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
二、配置logstash
1.修改配置文件,/etc/logstash/conf.d下。創(chuàng)建一個(gè)新的配置文件,內(nèi)容如下:
?View Code
文件內(nèi)容大致解釋?zhuān)?/p>
Logstash 分為 Input、Output、Filter、Codec 等多種plugins。
Input:數(shù)據(jù)的輸入源也支持多種插件,如elk官網(wǎng)的beats、file、graphite、http、kafka、redis、exec等等等、、、
Output:數(shù)據(jù)的輸出目的也支持多種插件,如本文的elasticsearch,當(dāng)然這可能也是最常用的一種輸出。以及exec、stdout終端、graphite、http、zabbix、nagios、redmine等等、、、
Filter:使用過(guò)濾器根據(jù)日志事件的特征,對(duì)數(shù)據(jù)事件進(jìn)行處理過(guò)濾后,在輸出。支持grok、date、geoip、mutate、ruby、json、kv、csv、checksum、dns、drop、xml等等、、
Codec:編碼插件,改變事件數(shù)據(jù)的表示方式,它可以作為對(duì)輸入或輸出運(yùn)行該過(guò)濾。和其它產(chǎn)品結(jié)合,如rubydebug、graphite、fluent、nmap等等。
具體以上插件的細(xì)節(jié)可以去官網(wǎng),介紹的挺詳細(xì)的。下面說(shuō)下該篇中的配置文件的含義:
來(lái)源:飛走不可-原文http://www.cnblogs.com/hanyifeng/p/5857875.html
input段:
file:使用file 作為輸入源
path: 日志的路徑,支持/var/log*.log,及[ “/var/log/messages”, “/var/log/*.log” ] 格式
start_position: 從文件的開(kāi)始讀取事件。另外還有end參數(shù)
ignore_older: 忽略早于24小時(shí)(默認(rèn)值86400)的日志,設(shè)為0,即關(guān)閉該功能,以防止文件中的事件由于是早期的被logstash所忽略。
filter段:
grok:數(shù)據(jù)結(jié)構(gòu)化轉(zhuǎn)換工具
match:匹配條件格式,將nginx日志作為message變量,并應(yīng)用grok條件NGINXACCESS進(jìn)行轉(zhuǎn)換
geoip:該過(guò)濾器從geoip中匹配ip字段,顯示該ip的地理位置
source:ip來(lái)源字段,這里我們選擇的是日志文件中的最后一個(gè)字段,如果你的是默認(rèn)的nginx日志,選擇第一個(gè)字段即可(注:這里寫(xiě)的字段是/opt/logstash/patterns/nginx 里面定義轉(zhuǎn)換后的)
target:指定插入的logstash字?jǐn)嗄繕?biāo)存儲(chǔ)為geoip
database:geoip數(shù)據(jù)庫(kù)的存放路徑
add_field: 增加的字段,坐標(biāo)經(jīng)度
add_field: 增加的字段,坐標(biāo)緯度
mutate: 數(shù)據(jù)的修改、刪除、類(lèi)型轉(zhuǎn)換
convert: 將坐標(biāo)轉(zhuǎn)為float類(lèi)型
convert: http的響應(yīng)代碼字段轉(zhuǎn)換成 int
convert: http的傳輸字節(jié)轉(zhuǎn)換成int
replace: 替換一個(gè)字段
remove_field: 移除message 的內(nèi)容,因?yàn)閿?shù)據(jù)已經(jīng)過(guò)濾了一份,這里不必在用到該字段了。不然會(huì)相當(dāng)于存兩份
date: 時(shí)間處理,該插件很實(shí)用,主要是用你日志文件中事件的事件來(lái)對(duì)timestamp進(jìn)行轉(zhuǎn)換,導(dǎo)入老的數(shù)據(jù)必備!在這里曾讓我困惑了很久哦。別再掉坑了
match:匹配到timestamp字段后,修改格式為dd/MMM/yyyy:HH:mm:ss Z
mutate:數(shù)據(jù)修改
remove_field: 移除timestamp字段。
output段:
elasticsearch:輸出到es中
host: es的主機(jī)ip+端口或者es 的FQDN+端口
index: 為日志創(chuàng)建索引logstash-nginx-access-*,這里也就是kibana那里添加索引時(shí)的名稱(chēng)
2.創(chuàng)建logstash配置文件之后,我們還要去建立grok使用的表達(dá)式,因?yàn)閘ogstash 的配置文件里定義的使用轉(zhuǎn)換格式語(yǔ)法,先去logstash的安裝目錄,默認(rèn)安裝位置:/opt/logstash/下,在該位置創(chuàng)建一個(gè)目錄patterns:
root@log-monitor ~]# mkdir -pv /opt/logstash/patternsmkdir: created directory ‘/opt/logstash/patterns’
在該目錄下創(chuàng)建格式文件,內(nèi)容如下:
[root@log-monitor ~]# cat /opt/logstash/patterns/nginxNGUSERNAME [a-zA-Z\.\@\-\+_%]+NGUSER %{NGUSERNAME}NGINXACCESS %{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} \"%{IPV4:http_x_forwarded_for}\"
注:該格式的最后有一個(gè)http_x_forwarded_for,因?yàn)槲覀內(nèi)罩臼菃⒂昧薱dn代理的。日志的第一段都是cdn的,最后一段才是真正客戶的ip。
需要分析的nginx日志路徑不在默認(rèn)的位置,所以我根據(jù)logstash 的配置,建個(gè)目錄先,并將日志文件拷貝進(jìn)去:
[root@log-monitor ~]# mkdir -pv /data/nginx-logs/[root@log-monitor ~]# ll /data/nginx-logs/total 123476-rw-r--r-- 1 nginx adm 126430102 Sep 9 16:02 access.log
3.然后就是logstash中配置的GeoIP的數(shù)據(jù)庫(kù)解析ip了,這里是用了開(kāi)源的ip數(shù)據(jù)源,用來(lái)分析客戶端的ip歸屬地。官網(wǎng)在這里:MAXMIND
先把庫(kù)下載到本地:
[root@log-monitor ~]# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
解壓到當(dāng)前路徑,并將它移動(dòng)到上述我們配置的路徑下,當(dāng)然其它路徑也是可以的,不過(guò)logstash 的配置文件也需要更改,如下:
[root@log-monitor ~]# gzip -d GeoLiteCity.dat.gz[root@log-monitor ~]# mv GeoLiteCity.dat /etc/logstash/.
測(cè)試下logstash 的配置文件吧,使用它自帶的命令去測(cè)試,如下:
[root@log-monitor ~]# /opt/logstash/bin/logstash -t -f /etc/logstash/conf.d/nginx_access.confConfiguration OK
注:-t -f 參數(shù)順序不能亂,格式就是定死的,-f 后面要跟配置文件;還有就是該測(cè)試只能測(cè)試語(yǔ)法,標(biāo)點(diǎn)符號(hào)。如果邏輯上有錯(cuò)誤的話,還是能啟動(dòng)的。這里就需要在正式啟動(dòng)運(yùn)行時(shí),多關(guān)注日志文件,位置:/var/log/logstash/logstash.log
三、配置Elasticsearch
1.先修改es的配置文件如下(存放路徑:/etc/elasticsearch/elasticsearch.yml):
[root@log-monitor ~]# egrep -v '^#|^$' /etc/elasticsearch/elasticsearch.ymlnode.name: es-1path.data: /data/elasticsearch/network.host: 127.0.0.1http.port: 9200
其它內(nèi)容都保持默認(rèn)。主要修改了es的數(shù)據(jù)存放路徑,它默認(rèn)的路徑在根目錄下,由于容量太小,而/data容量大。 根據(jù)你的實(shí)際情況考慮而定。
創(chuàng)建數(shù)據(jù)存放目錄:
[root@log-monitor ~]# mkdir -pv /data/elasticsearch
修改該文件的權(quán)限所屬者:
[root@log-monitor ~]# chown -R elasticsearch.elasticsearch /data/elasticsearch/
之后重啟es,重啟logstash。
[root@log-monitor ~]# systemctl restart elasticsearch[root@log-monitor ~]# systemctl restart logstash
檢查啟動(dòng)狀態(tài):
[root@log-monitor ~]# netstat -ulntp | grep javatcp6 0 0 127.0.0.1:9200 :::* LISTEN 25988/javatcp6 0 0 127.0.0.1:9300 :::* LISTEN 25988/java
[root@log-monitor ~]# systemctl status logstash● logstash.service - LSB: Starts Logstash as a daemon. Loaded: loaded (/etc/rc.d/init.d/logstash) Active: active (running) since Fri 2016-09-09 16:14:17 CST; 38s ago Docs: man:systemd-sysv-generator(8) Process: 27195 ExecStart=/etc/rc.d/init.d/logstash start (code=exited, status=0/SUCCESS) CGroup: /system.slice/logstash.service └─27201 /bin/java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX...Sep 09 16:14:17 log-monitor systemd[1]: Starting LSB: Starts Logstash as a daemon....Sep 09 16:14:17 log-monitor logstash[27195]: logstash started.Sep 09 16:14:17 log-monitor systemd[1]: Started LSB: Starts Logstash as a daemon..logstash 的日志查看:
[root@log-monitor ~]# tail -f /var/log/logstash/logstash.log{:timestamp=>"2016-09-09T16:14:26.732000+0800", :message=>"Pipeline main started"}
從上面可以看到啟動(dòng)是正常的,我們?cè)谌タ聪耬s里的索引,應(yīng)該已經(jīng)在倒入數(shù)據(jù)了。
[root@log-monitor ~]# curl 'localhost:9200/_cat/indices?v'health status index pri rep docs.count docs.deleted store.size pri.store.sizeyellow open .kibana 1 1 1 0 3.1kb 3.1kbyellow open logstash-nginx-access-2016.09.08 5 1 69893 0 24.2mb 24.2mbyellow open logstash-nginx-access-2016.09.09 5 1 339 0 273.8kb 273.8kb
從上面看到數(shù)據(jù)已經(jīng)在慢慢的導(dǎo)入了。大概需要一段時(shí)間,因?yàn)樯婕暗饺罩镜倪^(guò)濾寫(xiě)入等。不過(guò)也很快啦。我們暫時(shí)不去配置kibana。先去安裝nginx做個(gè)代理。
四、安裝nginx 配置kibana代理
1.下載穩(wěn)定版的nginx,這里使用yum安裝?;蛘咭部梢赃x擇編譯,個(gè)人覺(jué)得rpm包已經(jīng)足夠可以使用。
[root@log-monitor ~]# wget https://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.10.0-1.el7.ngx.x86_64.rpm
2.安裝,并修改默認(rèn)的配置文件
[root@log-monitor ~]# yum localinstall nginx-1.10.0-1.el7.ngx.x86_64.rpm –y
先將默認(rèn)的default.conf 移動(dòng)到其它目錄中,或者直接刪除也可以。我是直接刪除了。然后新建一個(gè)elk.conf配置文件,內(nèi)容如下:
[root@log-monitor ~]# cat /etc/nginx/conf.d/elk.confupstream elk { ip_hash; server 172.17.0.1:5601 max_fails=3 fail_timeout=30s; server 172.17.0.1:5601 max_fails=3 fail_timeout=30s;}server { listen 80; server_name localhost; server_tokens off; #close slow conn client_body_timeout 5s; client_header_timeout 5s; location / { proxy_pass http://elk/; index index.html index.htm; #auth auth_basic "ELK Private,Don't try GJ!"; auth_basic_user_file /etc/nginx/.htpasswd; }}文件內(nèi)容大致解釋?zhuān)?p>此處省略500字
3.新建一個(gè)http基本認(rèn)證用戶,使用的是httpd的一個(gè)工具組件,叫httpd-tools,用于生成加密的用戶數(shù)據(jù)庫(kù)
[root@log-monitor ~]# yum install httpd-tools –y
新建用戶:
[root@log-monitor ~]# htpasswd -cm /etc/nginx/.htpasswd elkNew password:Re-type new password:Adding password for user elk
重啟nginx,并檢查狀態(tài)
[root@log-monitor ~]# systemctl start nginx[root@log-monitor ~]# systemctl status nginx● nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2016-09-09 12:02:41 CST; 47s ago Docs: http://nginx.org/en/docs/ Process: 26422 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Process: 26420 ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 26424 (nginx) CGroup: /system.slice/nginx.service ├─26424 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf └─26425 nginx: worker processSep 09 12:02:41 log-monitor systemd[1]: Starting nginx - high performance web server...Sep 09 12:02:41 log-monitor nginx[26420]: nginx: the configuration file /etc/nginx/nginx.conf syntax is okSep 09 12:02:41 log-monitor nginx[26420]: nginx: configuration file /etc/nginx/nginx.conf test is successfulSep 09 12:02:41 log-monitor systemd[1]: Started nginx - high performance web server.Sep 09 12:03:13 log-monitor systemd[1]: Started nginx - high performance web server.Sep 09 12:03:26 log-monitor systemd[1]: Started nginx - high performance web server.檢查監(jiān)聽(tīng)端口:
[root@log-monitor ~]# netstat -ultpn | grep :8888tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 26424/nginx: master
修改iptables防火墻,插入以下規(guī)則,允許外面訪問(wèn)8888端口。由于我們最終是使用8888端口對(duì)外提供服務(wù)的,所以kibana的5601,以及es的9200、9300端口都不需要對(duì)外
[root@log-monitor ~]# iptables -I INPUT -p tcp -m state --state NEW --dport 8888 -j ACCEPT
4.訪問(wèn)一下網(wǎng)站,驗(yàn)證下:
來(lái)源:飛走不可-原文http://www.cnblogs.com/hanyifeng/p/5857875.html
輸入我們建立的elk用戶,登陸后,可以正常的訪問(wèn)kibana界面即可,如下圖:
添加一個(gè)索引,這個(gè)索引名字就是我們之前在logstash配置文件中導(dǎo)入es中的那個(gè),本文中是logstash-nginx-access-*,如下圖:
查看索引,目前自由一個(gè),設(shè)置為加星,即是discover默認(rèn)突出顯示的。
然后我們點(diǎn)擊Discover,即可看到我們倒入的數(shù)據(jù)了。如下圖:
來(lái)源:飛走不可-原文http://www.cnblogs.com/hanyifeng/p/5857875.html
最后這是我的dashboard,主要統(tǒng)計(jì)了web站點(diǎn)的客戶端ip地址歸屬地、總的http傳輸次數(shù)、top10 來(lái)源ip、top10 請(qǐng)求點(diǎn)擊頁(yè)面、錯(cuò)誤請(qǐng)求趨勢(shì)、等等,如下,上幾張圖:
五、小結(jié)
ELK優(yōu)勢(shì):
針對(duì)網(wǎng)絡(luò)攻擊事件時(shí),方便運(yùn)維人員查找溯源。日志集中收集存儲(chǔ),方便后續(xù)分析優(yōu)化業(yè)務(wù)、系統(tǒng)時(shí),做到有據(jù)可依——> 來(lái)自虎神’s總結(jié)
搭建的過(guò)程中真的蠻辛苦的(畢竟都是英文),出了問(wèn)題只能google,從不了解到熟悉,也算是種經(jīng)歷啦。不發(fā)牢騷了。。
畫(huà)圖容易,就如虎大牛所說(shuō):“先學(xué)會(huì)了如何查,畫(huà)圖自然而然就簡(jiǎn)單多了。當(dāng)然還要知道其中每個(gè)字段的含義”。我的下篇文章將會(huì)主要說(shuō)下如何畫(huà)圖(包括上面這些圖中樣式哈)。有沒(méi)有點(diǎn)小福利的感覺(jué)?
- 為什么制造商必須協(xié)調(diào)IT和OT,才能實(shí)現(xiàn)智能工業(yè)的成功?
- 打造AI時(shí)代先進(jìn)算力底座,鯤鵬開(kāi)發(fā)者峰會(huì)2025即將開(kāi)幕
- 金山辦公宣布未來(lái)五年戰(zhàn)略:重建海外基地,優(yōu)化WPS Office用戶體驗(yàn)
- 是德科技攜KAI系列布局AI新時(shí)代
- 微軟全球再裁6000人:無(wú)關(guān)績(jī)效,關(guān)乎未來(lái)
- 華為發(fā)布AI數(shù)據(jù)湖解決方案,助力企業(yè)加速擁抱AI
- 工信部等七部門(mén)聯(lián)合發(fā)文!以數(shù)智化賦能醫(yī)藥工業(yè)全鏈條轉(zhuǎn)型升級(jí)
- 擎畫(huà)算力賦能新藍(lán)圖,城市算網(wǎng)專(zhuān)家座談會(huì)在京成功舉辦
- 2024年Q4全球服務(wù)器收入773億美元同比增91%,非x86占比225億美元同比增262.1%
- 面向全球!華為發(fā)布IOC機(jī)場(chǎng)智能運(yùn)控中心等五大航空解決方案
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。