nginx 日志用rsyslog-kafka发送

rsyslog v8.7.0才可以支持kafka

centos7 直接安装 rsyslog-kafka
yum -y install rsyslog-kafka

如果centos6 就比较麻烦不能直接用yum来升级rsyslog的。
建议把旧的rsyslog 卸装,
rpm -ivh libfastjson-0.99.2-1.el6.x86_64.rpm
rpm -ivh libfastjson4-0.99.8-1.el6.x86_64.rpm
rpm -ivh libestr-0.1.11-1.el6.x86_64.rpm
rpm -ivh lz4-1.7.5-1.el6.x86_64.rpm
rpm -Uvh rsyslog-8.1907.0-1.el6.x86_64.rpm #这边使用 -U 参数是为了直接升级本地rsyslog
rpm -ivh rsyslog-kafka-8.1907.0-1.el6.x86_64.rpm #rsyslog-kafka组件安装依赖 rsyslog-8.1907,该命令最后执行,可能还依赖librdkafka
安装完后执行 rsyslogd -v,显示版本是8.1907.0,则验证rsyslog是否升级成功

查看/lib64/rsyslog/中是否存在 omkafka.so,验证rsyslog-kafka是否安装成功。

配置rsyslog

通用配置:
module(load=“omkafka”)
module(load=“imudp”)
input(type=“imudp” port=“514” ruleset=“tokafka”)

ruleset(name=“tokafka”) {
#输出到kafka
action(type=“omkafka” topic=“ha2kafka” broker=“ip:9092”)
#输出到文件
action(type=“omfile” file="/var/log/haproxy.log")
}

但nginx配置:
1.Nginx在v1.10之後的版本才支援syslog的方式處理日誌,請確保你的Nginx版本高於1.10

2.為了降低logstash的處理壓力,同時也為了降低整個配置的複雜度,我們nginx的日誌直接採用json格式

3.拋棄文字檔案記錄nginx日誌,改用syslog直接將日誌傳輸到遠端的rsyslog伺服器,以便我們後續的處理;這樣做的另一個非常重要的好處是我們再也無需考慮nginx日誌的分割和定期刪除問題(一般我們為了方便管理通常會採用logrotate服務來對日誌進行按天拆分和定期刪除,以免磁碟被佔滿)

先修改nginx 配置,添加一行日志格式,一定为json

log_format jsonlog ‘{’
‘“host”: “KaTeX parse error: Double superscript at position 13: host",' '̲"server_addr": …server_addr”,’
‘“http_x_forwarded_for”:“KaTeX parse error: Double subscript at position 7: http_x_̲forwarded_for",…remote_addr”,’
‘“time_local”:“KaTeX parse error: Double superscript at position 19: …e_local",' '̲"request_method…request_method”,’
‘“request_uri”:"KaTeX parse error: Double superscript at position 20: …est_uri",' '̲"status":status,’
‘“body_bytes_sent”:KaTeX parse error: Double superscript at position 23: …tes_sent,' '̲"http_referer":…http_referer",’
‘“http_user_agent”:“KaTeX parse error: Double superscript at position 24: …r_agent",' '̲"upstream_addr"…upstream_addr”,’
‘“upstream_status”:“KaTeX parse error: Double superscript at position 24: …_status",' '̲"upstream_respo…upstream_response_time”,’
‘“request_time”:$request_time’
‘}’;

access_log syslog:server=rsyslog.domain.com,facility=local7,tag=nginx_access_log,severity=info jsonlog;

4.access_log直接輸出到syslog服務,各引數解釋如下:

syslog:指明日誌用syslog服務接收
server:接收syslog傳送日誌的Rsyslog服務端地址,預設使用udp協議,埠是514
facility:指定記錄日誌訊息的型別,例如認證型別auth、計劃任務cron、程式自定義的local0-7等,沒有什麼特別的含義,不必深究,預設的值是local7
tag:給日誌新增一個tag,主要是為了方便我們在服務端區分是哪個服務或者client傳來的日誌,例如我們這裡給了tag:nginx_access_log,如果有多個服務同時都寫日誌給rsyslog,且配置了不通的tag,在rsyslog服務端就可以根據這個tag找出哪些是nginx的日誌
severity:定義日誌的級別,例如debug,info,notice等,預設是error

rsyslog server 端配置:
vi /etc/rsyslog.d/rsyslog_nginx_kafka_cluster.conf

module(load=“imudp”)
input(type=“imudp” port=“514”)

module(load=“omkafka”)

template(name=“nginxLog” type=“string” string="%msg%")

if KaTeX parse error: Expected '}', got 'EOF' at end of input: …then { if (programname == “nginx_access_log”) then
action(type=“omkafka”
template=“nginxLog”
broker=[“10.82.9.202:9092”,“10.82.9.203:9092”,“10.82.9.204:9092”]
topic=“rsyslog_nginx”
partitions.auto=“on”
confParam=[
“socket.keepalive.enable=true”
]
)
}

:rawmsg, contains, “nginx_access_log” ~

rsyslog配置檔案重要配置解釋如下:

module:載入模組,這裡我們需要載入imudp模組來接收nginx伺服器syslog發過來的日誌資料,也需要載入omkafka模組來將日誌寫入到kafka
input:開啟udp協議,埠514,也可以同時開啟tcp協議,兩者可以共存
template:定義一個模板,名字叫nginxLog,模板裡可以定義日誌的格式,因為我們傳的已經是json了,不需要再匹配格式,所以這裡不額外定義,注意模板名字要唯一
action:在匹配到inputname為imudp且programname為nginx_access_log(就是我們上邊nginx配置裡邊的tag)之後的處理方式,這裡的配置為匹配到的日誌通過omkafka模組寫入kafka叢集,還有一些關於omkafka更詳細的配置參考上邊給出的omkafka模組官方文件
:rawmsg, contains:最後這一行的意思是忽略包含nginx_access_log的日誌,沒有這一行的話rsyslog服務預設會把所有日誌都記錄到message裡邊一份,我們已經把日誌輸出到kafka了,本地就沒必要再記錄了

logstash配置:

input {
kafka {
bootstrap_servers => “10.82.9.202:9092,10.82.9.203:9092,10.82.9.204:9092”
topics => [“rsyslog_nginx”]
}
}

filter {
mutate {
gsub => [“message”, “\x”, “\\x”]
}

json {
    source => "message"
}

date {
    match => ["time_local","dd/MMM/yyyy:HH:mm:ss Z"]
    target => "@timestamp"
}

}

output {
elasticsearch {
hosts => [“10.82.9.205”, “10.82.9.206”, “10.82.9.207”]
index => “rsyslog-nginx-%{+YYYY.MM.dd}”
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值