久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

 輝仔runmwo0nbv 2020-01-20

來源:民工哥技術(shù)之路

作者:吃兔頭

本文以api.域名為測(cè)試對(duì)象進(jìn)行統(tǒng)計(jì),日志為crm.和risk.請(qǐng)求之和(此二者域名不具生產(chǎn)換環(huán)境統(tǒng)計(jì)意義),,生產(chǎn)環(huán)境請(qǐng)根據(jù)具體需要統(tǒng)計(jì)的域名進(jìn)行統(tǒng)計(jì)。

由于涉及生產(chǎn)線上服務(wù)器,,故本文部分服務(wù)器IP做了打碼處理,。

一、服務(wù)介紹

1.1,、ELK

ELK是三個(gè)開源軟件的縮寫,,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件。新增了一個(gè)FileBeat,,它是一個(gè)輕量級(jí)的日志收集處理工具(Agent),,F(xiàn)ilebeat占用資源少,,適合于在各個(gè)服務(wù)器上搜集日志后傳輸給Logstash,,官方也推薦此工具。

Elasticsearch是個(gè)開源分布式搜索引擎,,提供搜集,、分析、存儲(chǔ)數(shù)據(jù)三大功能,。它的特點(diǎn)有:分布式,,零配置,自動(dòng)發(fā)現(xiàn),,索引自動(dòng)分片,,索引副本機(jī)制,restful風(fēng)格接口,,多數(shù)據(jù)源,,自動(dòng)搜索負(fù)載等。

Logstash 主要是用來日志的搜集,、分析,、過濾日志的工具,支持大量的數(shù)據(jù)獲取方式。一般工作方式為c/s架構(gòu),,client端安裝在需要收集日志的主機(jī)上,,server端負(fù)責(zé)將收到的各節(jié)點(diǎn)日志進(jìn)行過濾、修改等操作在一并發(fā)往elasticsearch上去,。

Kibana 也是一個(gè)開源和免費(fèi)的工具,,Kibana可以為 Logstash 和ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助匯總,、分析和搜索重要數(shù)據(jù)日志,。

1.2、Nginx

Nginx('engine x') 是一個(gè)高性能的HTTP和反向代理服務(wù)器,,也是一個(gè)IMAP/POP3/SMTP代理服務(wù)器,。Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點(diǎn)開發(fā)的,第一個(gè)公開版本0.1.0發(fā)布于2004年10月4日,。其將源代碼以類BSD許可證的形式發(fā)布,,因它的穩(wěn)定性、豐富的功能集,、示例配置文件和低系統(tǒng)資源的消耗而聞名,。Nginx是一款輕量級(jí)的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個(gè)BSD-like 協(xié)議下發(fā)行,。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),,供俄國大型的入口網(wǎng)站及搜索引擎Rambler(俄文:Рамблер)使用。其特點(diǎn)是占有內(nèi)存少,,并發(fā)能力強(qiáng),,事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:新浪,、網(wǎng)易,、騰訊等。

本文中前端使用了nginx的反向代理功能,,并使用了nginx的HTTP功能,。

1.3、Kafka

Kafka是由Apache軟件基金會(huì)開發(fā)的一個(gè)開源流處理平臺(tái),,由Scala和Java編寫,。Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費(fèi)者規(guī)模的網(wǎng)站中的所有動(dòng)作流數(shù)據(jù),。這種動(dòng)作(網(wǎng)頁瀏覽,,搜索和其他用戶的行動(dòng))是在現(xiàn)代網(wǎng)絡(luò)上的許多社會(huì)功能的一個(gè)關(guān)鍵因素。這些數(shù)據(jù)通常是由于吞吐量的要求而通過處理日志和日志聚合來解決,。對(duì)于像Hadoop一樣的日志數(shù)據(jù)和離線分析系統(tǒng),,但又要求實(shí)時(shí)處理的限制,,這是一個(gè)可行的解決方案。Kafka的目的是通過Hadoop的并行加載機(jī)制來統(tǒng)一線上和離線的消息處理,,也是為了通過集群來提供實(shí)時(shí)的消息,。

二、架構(gòu)要求

2.1,、架構(gòu)描述

使用filebeat收集nginx日志,,輸出到kafka;logstash從kafka中消費(fèi)日志,通過grok進(jìn)行數(shù)據(jù)格式化,,輸出到elasticsearch中,kibana從elasticsearch中獲取日志,,進(jìn)行過濾出圖.

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

2.2、系統(tǒng)版本

CentOS Linux release 7.2.1511 (Core) 3.10.0-514.26.2.el7.x86_64

2.3,、軟件版本

jdk1.8.0_144
nginx-1.12.2
filebeat-6.3.2
awurstmeister/kafka(docker image)
logstash-6.5.4
elasticsearch-6.4.0
kibana-6.4.0

三,、linux系統(tǒng)環(huán)境配置與優(yōu)化

#查看服務(wù)器硬件信息 dmidecode|grep 'Product Name' #查看CPU型號(hào) grep name /proc/cpuinfo #查看CPU個(gè)數(shù) grep 'physical id' /proc/cpuinfo #查看內(nèi)存大小 grep MemTotal /proc/meminfo

四、系統(tǒng)初始化

4.1,、關(guān)閉防火墻

systemctl stop filewalld

4.2,、關(guān)閉selinux

setenforce 0 sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

4.3、添加普通賬戶

useradd elsearch
echo '******'|passwd --stdin elsearch

4.4,、配置yum源

cat /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$releasever enabled=1 failovermethod=priority baseurl=http://mirrors.cloud./centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirrors.cloud./centos/RPM-GPG-KEY-CentOS-7 [updates] name=CentOS-$releasever enabled=1 failovermethod=priority baseurl=http://mirrors.cloud./centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=http://mirrors.cloud./centos/RPM-GPG-KEY-CentOS-7 [extras] name=CentOS-$releasever enabled=1 failovermethod=priority baseurl=http://mirrors.cloud./centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=http://mirrors.cloud./centos/RPM-GPG-KEY-CentOS-7

4.5,、清理開機(jī)自啟動(dòng)服務(wù)

for i in `chkconfig --list|grep 3:on |awk '{print $1}'`;do chkconfig$i off;done
for i in crond network rsyslog sshd;do chkconfig --level 3 $ion;done
chkconfig --list|grep 3:on

4.6、服務(wù)器時(shí)間同步

echo '*/5 * * * * /usr/sbin/ntpdate time.windows.com > /dev/null2>&1' >>/var/spool/cron/root

4.7,、加大文件描述符

echo '* - nofile 65535' >> /etc/security/limits.conf
tail -1 /etc/security/limits.conf
#重新登陸后生效(無需重啟)
ulimit -n(重新登陸后查看)

4.8,、內(nèi)核參數(shù)調(diào)優(yōu)(可不操作)

\cp /etc/sysctl.conf /etc/sysctl.conf.bak cat>>/etc/sysctl.conf<<EOF net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_max_orphans = 3276800 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216 net.core.netdev_max_backlog = 32768 net.core.somaxconn = 32768 net.ipv4.tcp_syncookies=1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout=1 net.ipv4.tcp_keepalive_time=1200 net.ipv4.tcp_max_syn_backlog = 65536 net.ipv4.ip_local_port_range = 1024 65535 EOF /sbin/sysctl -p

五、部署開始

5.1,、更改nginx日志輸出格式

5.1.1,、定義日志格式

cat /etc/nginx/nginx.conf
log_format main '$remote_addr - $remote_user [$time_local]'$request' '
'$status$body_bytes_sent '$http_referer' '
''$http_user_agent' '$http_x_forwarded_for'';

5.1.2、加載日志格式到對(duì)應(yīng)域名配置中

cat /etc/nginx/conf.d/vhost/api..conf server { listen 80; server_name newtest-msp-api.; access_log /var/log/nginx/api..log main; }

5.1.3,、reload生效

nginx -s reload

5.1.4,、清空原輸出文件,,并查看輸出的日志格式

:> /var/log/nginx/api..log tailf /var/log/nginx/api.mingongger.com.cn.log 1xx.2xx.72.175 - - [18/Mar/2019:13:51:17 0800] 'GET/user/fund/113 HTTP/1.1' 200 673 '-' 'Mozilla/5.0 (WindowsNT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) sun/1.5.6 Chrome/69.0.3497.106Electron/4.0.3 Safari/537.36' '-'

5.2,、配置kafka

測(cè)試環(huán)境使用docker起的kafka,kafka部署掠過,以下任選一種

5.2.1,、方法一 創(chuàng)建kafka topic

./kafka-topics.sh --create --topic nginxlog --replication-factor 1--partitions 1 --zookeeper localhost:2181

5.2.2,、方法二

auto.create.topics.enable=true

開啟kafka自動(dòng)創(chuàng)建topic配置

5.2.3、filebeat部署完成后確認(rèn)kafka topic中有數(shù)據(jù)

./kafka-console-consumer.sh --bootstrap-server 192.168.0.53:9091--from-beginning --topic nginxlog

輸出如下

{'@timestamp':'2019-03-14T07:16:50.140Z','@metadata':{'beat':'filebeat','type':'doc','version':'6.3.2','topic':'nginxlog'},'fields':{'log_topics':'nginxlog'},'beat':{'version':'6.3.2','name':'test-kafka-web','hostname':'test-kafka-web'},'host':{'name':'test-kafka-web'},'source':'/var/log/nginx/newtest-msp-api.-80.log','offset':114942,'message':'116.226.72.175- - [14/Mar/2019:15:16:49 0800] newtest-msp-api. POST\'/upstream/page\' \'-\' 200 6314\'http://newtest-msp-crm./\' 200 192.168.0.49:60070.024 0.024 \'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36\'\'-\''} Processed a total of 7516 messages

測(cè)試環(huán)境中kafka地址為

192.168.0.53:9091

5.3,、配置filebeat收集nginx日志

5.3.1,、安裝filebeat

cd /opt/ && wget http://download./download/software/filebeat-6.3.2-x86_64.rpm yum localinstall filebeat-6.3.2-x86_64.rpm -y

5.3.2、編輯配置文件

cat /etc/filebeat/filebeat.yml
filebeat.prospectors:
- input_type: log
enabled: true
paths:
- /var/log/nginx/api..log#收集日志路徑
fields:
log_topics: nginxlog #kafka中topic名稱
json.keys_under_root: true
json.overwrite_keys: true
output.kafka:
enabled: true
hosts:['192.168.0.53:9091'] #kafka地址
topic:'%{[fields][log_topics]}' #kafka中topic名稱
partition.round_robin:
reachable_only: false
compression: gzip
max_message_bytes: 1000000
required_acks: 1

5.3.3,、啟動(dòng)filebeat& 開機(jī)啟動(dòng)

systemctl start filebeat systemctl enable filebeat

5.4,、配置logstash

5.4.1 編輯配置

cat /usr/local/logstash/config/nginx.conf
input {
kafka {
type =>'nginxlog'
topics =>['nginxlog']
bootstrap_servers=> ['192.168.0.53:9091']
group_id =>'nginxlog'
auto_offset_reset=> latest
codec =>'json'
}
}
filter {
if [type] == 'nginxlog'{
grok {
match => {'message' => '%{COMBINEDAPACHELOG}' }
remove_field =>'message'
}
date {
match => ['timestamp' , 'dd/MMM/YYYY:HH:mm:ss Z' ]
}
geoip {
source =>'clientip'
target =>'geoip'
database =>'/usr/local/logstash/config/GeoLite2-City.mmdb'
add_field => ['[geoip][coordinates]', '%{[geoip][longitude]}' ] #添加字段coordinates,,值為經(jīng)度
add_field => ['[geoip][coordinates]', '%{[geoip][latitude]}' ] #添加字段coordinates,值為緯度
}
mutate {
convert => ['[geoip][coordinates]', 'float']
}
useragent {
source =>'agent'
target =>'userAgent'
}
}
}
output {
if [type] == 'nginxlog' {
elasticsearch {
hosts =>['http://192.168.0.48:9200']
index =>'logstash-nginxlog-%{ YYYY.MM.dd}'
}
stdout {codec =>rubydebug}
}
}

5.4.2,、使用配置文件啟動(dòng)logstash服務(wù),,觀察輸出

/usr/local/logstash/bin/logstash -f nginx.conf { 'httpversion'=> '1.1', 'verb' =>'GET', 'auth'=> '-', '@timestamp'=> 2019-03-18T06:41:27.000Z, 'type'=> 'nginxlog', 'json'=> {}, 'source'=> '/var/log/nginx/newtest-msp-api.-80.log', 'fields' =>{ 'log_topics'=> 'nginxlog' }, 'response'=> '200', 'offset'=> 957434, 'host'=> { 'name' =>'test-kafka-web' }, 'beat'=> { 'hostname'=> 'test-kafka-web', 'version'=> '6.3.2', 'name'=> 'test-kafka-web' }, 'bytes'=> '673', 'request'=> '/user/fund/113', 'timestamp'=> '18/Mar/2019:14:41:27 0800', 'referrer'=> '\'-\'', 'userAgent'=> { 'os'=> 'Windows', 'major' => '4', 'patch'=> '3', 'build'=> '', 'minor'=> '0', 'os_name'=> 'Windows', 'device'=> 'Other', 'name'=> 'Electron' }, 'geoip'=> { 'ip' => '1xx.2xx.72.175', 'country_name' => 'China', 'coordinates' => [ [0] 121.4012, [1] 31.0449 ], 'region_name' => 'Shanghai', 'location' => { 'lat'=> 31.0449, 'lon'=> 121.4012 }, 'continent_code' => 'AS', 'timezone' => 'Asia/Shanghai', 'longitude' => 121.4012, 'city_name' => 'Shanghai', 'country_code2' => 'CN', 'region_code' => 'SH', 'latitude' => 31.0449, 'country_code3' => 'CN' }, '@version'=> '1', 'clientip'=> '1xx.2xx.72.175', 'ident'=> '-', 'agent'=> '\'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) sun/1.5.6 Chrome/69.0.3497.106 Electron/4.0.3Safari/537.36\'' }

5.4.3、后臺(tái)啟動(dòng)logstash

確認(rèn)出現(xiàn)以上輸出后,,將logstash分離出當(dāng)前shell,并放在后臺(tái)運(yùn)行

nohup /usr/local/logstash/bin/logstash -f nginx.conf &>/dev/null &

5.5,、kibana配置

5.5.1、修改kibana配置

/usr/local/kibana-6.5.4-linux-x86_64/config/kibana.yml #增加高德地圖 tilemap.url:'http://webrd02.is./appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'

5.5.2,、創(chuàng)建Index Pattern

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

5.5.3,、IP訪問TOP5

選擇柱形圖

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

添加X軸,以geoip.ip為order by字段

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

5.5.4 ,、PV

選擇metric

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

默認(rèn)統(tǒng)計(jì)總?cè)罩緱l數(shù),即為PV數(shù)

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

5.5.5,、全球訪問地圖

選擇map

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

Field選擇geoip.location

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

選擇添加高德地圖

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

5.5.6、實(shí)時(shí)流量

選擇線條圖

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

5.5.7,、操作系統(tǒng)

選擇餅圖

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

5.5.8,、登陸次數(shù)

過濾login關(guān)鍵字,并做count統(tǒng)計(jì)

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

5.5.9、訪問地區(qū)

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

5.5.10,、Dashboard展示

  • IP訪問Top5:每日客戶端IP請(qǐng)求數(shù)最多的前五個(gè)(可分析出攻擊者IP)

  • PV:每日頁面訪問量

  • 全球訪問圖:直觀的展示用戶來自哪個(gè)國家哪個(gè)地區(qū)

  • 實(shí)時(shí)流量:根據(jù)@timestamp字段來展示單位時(shí)間的請(qǐng)求數(shù)(可根據(jù)異常峰值判斷是否遭遇攻擊)

  • 操作系統(tǒng):展示客戶端所用設(shè)備所占比重

  • 登陸次數(shù):通過過濾request中l(wèi)ogin的訪問記錄,粗略估算出進(jìn)行過登陸的次數(shù)

  • 訪問地區(qū):展示訪問量最多的國家或地區(qū)

  • 需展示其他指標(biāo),,可進(jìn)行自由發(fā)揮

萬字長文利用ELK分析Nginx日志生產(chǎn)實(shí)戰(zhàn)(高清多圖)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多