摘要mysql
簡述logstash的經常使用插件,以及簡單的使用案例linux
一:基礎運行nginx
建議使用supervisor來管理ELK中的各個組件,方便同一管理web
安裝 https://www.aolens.cn/?p=809 有講解redis
提供一個經常使用的配置:sql
[program:logstash] command=/opt/logstash/bin/logstash -f /opt/logstash/conf/index.conf numprocs=1 ;開幾個進程 dirrectory=/opt/logstash user=root ;用戶 stdout_logfile=/opt/logstash/logs/logstash.log stdout_logfile_maxbytes=1MB ;每一個日誌大小 stdout_logfile_backups=10 ;保留10個日誌文件 stderr_logfile=/opt/logstash/logs/logstash_err.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10
運行參數:json
啓動logstash服務(經常使用supervisor守護進程)數組
./bin/logstash -f /etc/logstash/conf.d/* -t #檢查配置文件是否okruby
./bin/logstash -f conf.d/nginx.conf -w 5 -l /var/log/logstash/bash
二:配置語法
1,區域:(section)
Logstash用{}來定義區域。能夠在區域中定義多個插件區域,插件區域內能夠定義鍵值對
eg:
input { # 輸入數據 file { path=["/var/log/messages","/var/log/*.log"] type="system" start_position="beginning" } } filter{ # 數據過濾處理 if[type]=="system"{ grok{ match=["message",%{COMBINEDAPACHELOG}] } } } output{ # 數據處理輸出 stdout{ codec=rubydebug } }
2,數據類型:
string——普通字符串
name => "Hello world"
name => 'It\'s a beautiful day'
array——數組能夠是單個或者多個字符串值。
path => [ "/var/log/messages", "/var/log/*.log" ]
path => "/data/mysql/mysql.log"
hash——鍵值對,注意多個鍵值對用空格分隔,而不是逗號。
match => {
"field1" => "value1"
"field2" => "value2"
... }
Codec——用來表示數據編碼。用於input和output段。便於數據的處理。
codec => "json"
number——必須是有效的數值,浮點數或者整數。
port => 33
boolean——布爾值必須是TRUE或者false。
ssl_enable => true
bytes——指定字節單位。默認是byte。
my_bytes => "1113" # 1113 bytes
my_bytes => "10MiB" # 10485760 bytes
my_bytes => "100kib" # 102400 bytes Binary (Ki,Mi,Gi,Ti,Pi,Ei,Zi,Yi) 單位1024
my_bytes => "180 mb" # 180000000 bytes SI (k,M,G,T,P,E,Z,Y) 單位基於1000
password——一個單獨的字符串。
my_password => "password"
path——表明有效的操做系統路徑。
my_path => "/tmp/logstash"
3:字段引用
Logstash配置中要使用字段的值,只須要把字段的名字寫在中括號[]裏。只要是input輸入的值,均可以引用
eg:
[geoip][location][-1]
4,條件判斷
表達式支持的操做符
==(等於),!=(不等),<(小於),>(大於),<=(小等),>=(大等)
=~(匹配正則),!~(不匹配正則)
in(包含),not in(不包含)
and(與),or(或),nand(與非),xor(非或)
()(複合表達式),!()(取反覆合表達式結果)
三:經常使用插件
1,插件管理
./bin/plugin -h
install
uninstall
update
list
eg:
bin/plugin install logstash-output-webhdfs
bin/plugin update logstash-input-tcp
2,經常使用插件 input,output,filter,codec
2.1 Input插件
stdin:標準輸入,經常使用於測試,
input { stdin { type = "string" tags = ["add"] codec="plain" } }
file:從文件系統中讀取文件,相似linux下的tail -f。 最經常使用
input { file { path = ["/var/log/*.log","/var/log/message"] # logstash只支持文件的絕對路徑 type = "system" # type記錄文件類型,定義的變量爲全局變量,其餘插件均可以調用 start_position = "beginning" } }
redis:從redis服務器讀取,同時使用redis channel和redis list。
input{ redis{ data_type="list" key="logstash-nginx" host="192.168.1.250" port=6379 db=1 threads=5 }} 將源數據寫入redis output{ redis{ host="192.168.1.250" port=6379 db=1 data_type="list" key="logstash-nginx" }}
TCP/UDP: 輸入
#nc127.0.0.18888 /var/log/nginx/access.json # 能夠是json文件直接傳值 #echo'{"name":"liuziping","age":"18"}' |nc127.0.0.18888 input { tcp { port = 8888 # 定義tcp監聽端口 codec="json" # 規定傳入的數據爲json格式,k/v結構方便分析 mode = "server" } }
syslog:監聽在514端口的系統日誌信息,並解析成RFC3164格式。
input { syslog { port = "514" } }
beats: 經過Filebeat發送事件。
2.2:Output 插件
stdout:標準輸出
output { stdout { codec = rubydebug workers = 2 } }
file :保存成文件
output { file { path = "/path/to/%{+yyyy/MM/dd/HH}/%{host}.log.gz" message_format = "%{message}" gzip = true } }
elasticsearch:保存進elasticsearch ,也是最爲重要的
output { elasticsearch { hosts => ["192.168.0.2:9200"] # 或者cluster => 「ClusterName「 index => "logstash-%{type}-%{+YYYY.MM.dd}" #索引名,統一格式,方便kibana導入,會講統一類型的日誌,所有導入 這裏的type=input中的type值 document_type => "nginx" workers => 1 #啓動一個進程 flush_size => 20000 # 攢夠20000 條數據一次性發給ES,默認500條 idle_flush_time => 10 # 若是10s內沒攢夠 20000 條也發一次給ES,默認1s template_overwrite => true } }
redis:保存到redis中在input插件中已講解
TCP:輸出TCP
output { tcp { host = "192.168.0.2" port = 8888 codec = json_lines } }
Email:發送郵件
exec:調用命令執行