nginx埋點(diǎn),按天輸出日志难裆,filebeat收集日志到elasticsearch

一子檀、Nginx 按天生成日志

定義時(shí)間變量指定格式

    map $time_iso8601 $logdate {
        '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
        default    'date-not-found';
    }

自定義日志json格式

log_format  json_log '{"time":"$logdate","demo1":"$arg_demo1","demo2":"$arg_demo2"}';

$args $arg_name 是nginx預(yù)定義變量
$args 可以接收請(qǐng)求uri后面的參數(shù)
$arg_name 當(dāng)前請(qǐng)求中名為 name 的參數(shù)的值镊掖,而且還是未解碼的原始形式的值
例:http://192.168.31.112:80/web?demo1=aaaa&demo2=bbb
此時(shí)$args 的值為demo1=aaaa&demo2=bbb
$arg_demo1 的值為 aaaa
$arg_demo2 的值為 bbb
存儲(chǔ)日志

access_log  logs/ng_$logdate.log  json_log;

二、埋點(diǎn)

前端發(fā)送一個(gè)請(qǐng)求褂痰,ng攔截該請(qǐng)求亩进,返回一個(gè)空gif,并將本次請(qǐng)求存入日志

location ^~/web {
            access_log  logs/ng_$logdate.log  json_log;
            empty_gif;
}

之后通過(guò)filebeat收集日志缩歪,在es中做數(shù)據(jù)統(tǒng)計(jì)

完整nginx.conf


worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    #default_type  application/octet-stream;

    map $time_iso8601 $logdate {
        '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
        default    'date-not-found';
    }
    #默認(rèn)日志
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    #自定義日志格式
    log_format  json_log '{"time":"$logdate","demo1":"$arg_demo1","demo2":"$arg_demo2"}';

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        #按天輸出access日志
        access_log  logs/access_$logdate.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

       location ^~/demo {
            access_log  logs/ng_$logdate.log  json_log;
            empty_gif;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

測(cè)試

瀏覽器發(fā)送請(qǐng)求
(注:默認(rèn)情況下訪問(wèn)nginx靜態(tài)資源只能用get請(qǐng)求归薛,post請(qǐng)求會(huì)報(bào)405)
http://192.168.31.112:80/web?demo1=aaaa&demo2=bbb

nginx的logs目錄下會(huì)多出一個(gè)ng_2023-01-06.log的日志文件
查看日志:

{"time":"2023-01-06","demo1":"aaaa","demo2":"bbb"}

三、filebeat收集日志并以json保存在elasticsearch中

filebeat安裝步驟 略
在filebeat的目錄下創(chuàng)建文件filebeat-nginx.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    #nginx日志所在絕對(duì)路徑驶冒,用* 去匹配
    - /usr/local/nginx/logs/ng_*.log
  fields:
    index: nginx
  json.keys_under_root: true              
  json.overwrite_keys: true
#===================================
output.elasticsearch:
    #es連接地址苟翻,多個(gè)用逗號(hào)分隔
    hosts: ["192.168.31.112:9200"]
    username: "elastic"
    password: "123456"
    index: "elk-%{[fields.source]}-*"
    indices:
      - index: "elk-nginx-%{+yyyy.MM.dd}"
        when.equals:
          fields:
            index: "nginx"
#===================================
setup.kibana:
  host: "192.168.31.112:5601"
#===================================
# 允許自動(dòng)生成index模板
setup.template.enabled: true
# 如果存在模塊則覆蓋
setup.template.overwrite: true
#和前面的index保持一致
setup.template.name: "elk-nginx"
setup.template.pattern: "elk-*"
setup.ilm.enabled: auto
# 這里一定要注意 會(huì)在alias后面自動(dòng)添加-*
setup.ilm.rollover_alias: "park-ssm"
setup.ilm.pattern: "{now/d}"
# 當(dāng)我們?cè)搶傩詾閒alse時(shí),就不再遵循ilm的管理骗污,而是索引到我們自己指定的index中
setup.ilm.enabled: false
重要:一定要清空es之前收集的傳統(tǒng)日志格式的數(shù)據(jù)崇猫,還要把nginx日志情況,如果有多臺(tái)nginx服務(wù)器需忿,則改完json格式的日志后诅炉,一定要把日志清空,否則將會(huì)在kibana中顯示兩種日志格式屋厘;刪除原有(如果有)elk-nginx-* 的索引

DELETE /elk-nginx-*

啟動(dòng)filebeat:
前臺(tái)指定配置文件啟動(dòng):

./filebeat -e -c filebeat-nginx.yml -d "publish"

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

nohup ./filebeat -c /usr/local/filebeat/filebeat-nginx.yml -e > /usr/local/filebeat/logs/filebeat.log 2>&1

敲重點(diǎn):
此時(shí)你關(guān)閉終端涕烧,斷開(kāi)ssh連接,會(huì)導(dǎo)致這個(gè)nohup進(jìn)程也同時(shí)終止汗洒。因?yàn)閿嚅_(kāi)連接時(shí)议纯,會(huì)發(fā)送SIGHUP信號(hào)給當(dāng)前shell的作業(yè)列表的所有進(jìn)程,nohup進(jìn)程接收到SIGHUP信號(hào)后終止溢谤。也就是說(shuō)后臺(tái)啟動(dòng)的filebeat會(huì)停止運(yùn)行瞻凤。

解決辦法
解決終端關(guān)閉導(dǎo)致后臺(tái)的nohup進(jìn)程停止的有兩種辦法。

第一種是世杀,在關(guān)閉xshell終端之前阀参,先用exit命令斷開(kāi)ssh連接,然后就可以關(guān)閉終端了瞻坝。但該方法一定程度上仍可能存在直接關(guān)閉終端導(dǎo)致nohup進(jìn)程終止的危險(xiǎn)蛛壳。

第二種是,在原來(lái)的命令之前加上disown參數(shù)所刀,這個(gè)參數(shù)將會(huì)使啟動(dòng)的nohup進(jìn)程從當(dāng)前shell的作業(yè)列表中清除衙荐,從而避免nohup進(jìn)程在關(guān)閉這個(gè)shell時(shí)接收到SIGHUP信號(hào)。

nohup ./filebeat -c /usr/local/filebeat/filebeat-nginx.yml -e > /usr/local/filebeat/logs/filebeat.log 2>&1 & disown

在瀏覽器中發(fā)送器請(qǐng)求
http://192.168.31.112:80/web?demo1=aaaa&demo2=bbb

在kibana中查詢

GET /elk-nginx-2023.01.06/_search
{
  "query": {
    "match_all": {}
  }
}

會(huì)發(fā)現(xiàn)數(shù)據(jù)已經(jīng)是根據(jù)自己定義的鍵值對(duì)存儲(chǔ)

四勉痴、將filebeat做成服務(wù)

#進(jìn)入對(duì)應(yīng)目錄
cd /etc/systemd/system
#創(chuàng)建文件
touch filebeat.service
#賦予可執(zhí)行權(quán)限
chmod 777 filebeat.service
#編輯內(nèi)容
vi filebeat.service

在文件中輸入如下內(nèi)容

[Unit]
Description=filebeat
Wants=network-online.target
After=network-online.target
[Service]
User=root
ExecStart=/usr/local/filebeat-7.17.8/filebeat -e -c /usr/local/filebeat-7.17.8/filebeat-nginx.yml
Restart=always
[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable filebeat
systemctl start filebeat
systemctl status filebeat
systemctl stop filebeat

ok

參考連接:filebeat收集json格式的nginx程序日志

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赫模,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蒸矛,更是在濱河造成了極大的恐慌瀑罗,老刑警劉巖胸嘴,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異斩祭,居然都是意外死亡劣像,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門摧玫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)耳奕,“玉大人,你說(shuō)我怎么就攤上這事诬像∥萑海” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵坏挠,是天一觀的道長(zhǎng)芍躏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)降狠,這世上最難降的妖魔是什么对竣? 我笑而不...
    開(kāi)封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮榜配,結(jié)果婚禮上否纬,老公的妹妹穿的比我還像新娘。我一直安慰自己蛋褥,他們只是感情好临燃,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著烙心,像睡著了一般谬俄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弃理,一...
    開(kāi)封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音屎蜓,去河邊找鬼痘昌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛炬转,可吹牛的內(nèi)容都是我干的辆苔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼扼劈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驻啤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起荐吵,我...
    開(kāi)封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骑冗,失蹤者是張志新(化名)和其女友劉穎赊瞬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贼涩,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巧涧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遥倦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谤绳。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖袒哥,靈堂內(nèi)的尸體忽然破棺而出缩筛,到底是詐尸還是另有隱情,我是刑警寧澤堡称,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布瞎抛,位于F島的核電站,受9級(jí)特大地震影響粮呢,放射性物質(zhì)發(fā)生泄漏婿失。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一啄寡、第九天 我趴在偏房一處隱蔽的房頂上張望豪硅。 院中可真熱鬧,春花似錦挺物、人聲如沸懒浮。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砚著。三九已至,卻和暖如春痴昧,著一層夾襖步出監(jiān)牢的瞬間稽穆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工赶撰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舌镶,地道東北人籽御。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓哨毁,卻偏偏與公主長(zhǎng)得像赘娄,于是被迫代替她去往敵國(guó)和親叫确。 傳聞我的和親對(duì)象是個(gè)殘疾皇子悯仙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容