Filebeat

Filebeat

1. Filebeat基本介紹

1.1 Filebeat介紹——官網傳送門

filebeat是用于“轉發(fā)”和“集中日志數據”的“輕量型數據采集器”。Filebeat監(jiān)視您指定的日志文件路徑,收集日志事件并將數據轉發(fā)到Elasticserach或Logstash、Redis等。

圖1 filebeat.png
1.2 Filebeat主要組件

Filebeat主要包含兩個組件:輸入和收割機,這些組件協(xié)同工作將文件尾部最新事件數據發(fā)送到指定的輸出

  • 輸入(input):輸入負責管理收割機從哪個路徑查找所有可讀取的資源
  • 收割機(Harvester):負責逐行讀取單個文件的內容,然后將內容發(fā)送到輸出。
1.3 Filebeat工作流程

當filebeat啟動后,filebeat通過input讀取指定的日志路徑然后為該日志啟動一個收割進程(harvester),每一個收割進程讀取一個日志文件的新內容,并發(fā)送這些新的日志數據到處理程序(spooler),處理程序會集合這些事件,最后filebeat會發(fā)送集合的數據到指定的地點。

圖2 filebeat工作流程.png
1.4 Filebeat配置
圖3 filebeat配置.png

2. Filebeat基本使用

1.安裝及使用

#1. 安裝filebeat
[root@web01 ~]# rpm -ivh filebeat-7.4.0-x86_64.rpm
#啟動
systemctl enable filebeat
systemctl start filebeat

#2. 進到/etc/filebeat,編輯配置文件
[root@web01 ~]# vim test.yml
filebeat.inputs:
- type: stdin     #標準輸入
  enabled: true   #啟用
output.console:   #標準輸出
  pretty: true
  enable: true
#測試啟動
filebeat -e -c test.yml

2.將文件最新發(fā)生變化的內容,存入es

[root@web01 filebeat]# vim file.yml 
filebeat.inputs:
- type: log    
  paths: /var/log/nginx/access.log
  enabled: true  
  
output.console:
  hosts: ["10.0.0.161:9200", "10.0.0.162:9200", "10.0.0.163:9200"]
  index: nginx-access-log

setup.template.name: nginx
setup.template.pattern: nginx-*

3. 收集系統(tǒng)日志

3.1 系統(tǒng)日志

系統(tǒng)日志一般指的是messages,secure,cron,dmesg,boot,ssh等日志

3.2 統(tǒng)一收集系統(tǒng)日志

需要對系統(tǒng)日志進行統(tǒng)一、集中的管理,

  • 減少無用的數據
  • 調整索引名稱
  • 測試調整模板,設定分片

通過rsyslog收集本地所有類型的日志,然后使用filebeat對該文件進行分收集即可。

3.3 系統(tǒng)日志收集實踐
  • 安裝rsyslog
[root@web01 ~]# yum install rsyslog -y
  • 配置rsyslog
[root@web01 ~]# vim /etc/rsyslog.conf
#配置日志收集的方式
...
*.* /var/log/oldxu.log   #將本地所有日志保存至本地/var/log/oldxu.log
...
  • 重啟rsyslog
[root@web01 ~]# systemctl enable rsyslog
[root@web01 ~]# systemctl start rsyslog
  • 測試
root@web01 ~]# cat /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/oldxu.log
  include_lines: ['^ERR', '^WARN', 'sshd']   #只看指定的日志

output.elasticsearch:
  hosts: ["10.0.0.161:9200","10.0.0.162:9200","10.0.0.163:9200"]
  index: "system-%{[agent.version]}-%{+yyyy.MM.dd}"

setup.ilm.enabled: false
setup.template.name: system   #索引關聯的模板名稱
setup.template.pattern: system-*

方式一:
###設定system模板的分片數和副本數
#setup.template.settings:            #定義索引分片數和副本
#  index.number_of_shards: 3
#  index.number_of_replicas: 1

方式二:
   "number_of_routing_shards": "30",
   "number_of_shards": "10",
   "number_of_replicas": "1",

1.修改system模板   --->  添加 shards 分片數數量,replicas的數量
2.刪除模板關聯的索引
3.刪除filebeat自行指定的分片數和副本數
4.重啟filebeat
5.產生新的日志

[圖片上傳失敗...(image-fb2065-1579012042680)]

4. 收集nginx日志

4.1 編寫配置文件
[root@web01 nginx]# vim nginx.conf
...
log_format json '{ "time_local": "$time_local", '
                      '"remote_addr": "$remote_addr", '
                      '"referer": "$http_referer", '
                      '"request": "$request", '
                      '"status": $status, '
                      '"bytes": $body_bytes_sent, '
                      '"agent": "$http_user_agent", '
                      '"x_forwarded": "$http_x_forwarded_for", '
                      '"up_addr": "$upstream_addr",'
                      '"up_host": "$upstream_http_host",'
                      '"upstream_time": "$upstream_response_time",'
                      '"request_time": "$request_time"'
'}';
    access_log /var/log/nginx/access.log json;
...
4.2 配置nginx站點目錄
[root@web01 conf.d]# cat elk.oldxu.com.conf 
server {
    listen 80;
    server_name elk.oldxu.com;
        root /code/elk;
    access_log  /var/log/nginx/elk.oldxu.com.log json;
    
    location / {
        index index.html;
    }
}

[root@web01 conf.d]# cat bk.oldxu.com.conf 
server {
    listen 80;
    server_name bk.oldxu.com;
    root /code/bk;
        access_log  /var/log/nginx/bk.oldxu.com.log json;
#        error_log  /var/log/nginx/blog_error.log;
    location / {
        index index.php index.html;
    }
}

[root@web01 conf.d]# cat bs.oldxu.com.conf 
server {
    listen 80;
    server_name bs.oldxu.com;
    root /code/bs;
        access_log  /var/log/nginx/bs.oldxu.com.log json;
#        error_log  /var/log/nginx/blog_error.log;
    location / {
        index index.php index.html;
    }
}
4.3 測試,模擬產生日志
[root@web01 conf.d]# curl -H Host:elk.oldxu.com http://10.0.0.7 
elk.oldux.com 

[root@web01 conf.d]# curl -H Host:bs.oldxu.com http://10.0.0.7 
bs.oldux.com 

[root@web01 conf.d]# curl -H Host:bk.oldxu.com http://10.0.0.7 
bk.oldux.com
4.4 配置filebeat
[root@web01 filebeat]# cat filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/elk.oldxu.com.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-elk-host"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/bs.oldxu.com.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-bs-host"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/bk.oldxu.com.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-bk-host"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["nginx-error"]

output.elasticsearch:
  hosts: ["10.0.0.161:9200","10.0.0.162:9200","10.0.0.163:9200"]
  indices:
    - index: "nginx-elk-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-elk-host"

    - index: "nginx-bs-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-bs-host"

    - index: "nginx-bk-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-bk-host"

    - index: "nginx-error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-error"

setup.ilm.enabled: false
setup.template.name: nginx   #索引關聯的模板名稱
setup.template.pattern: nginx-*

5. Tomcat日志

5.1 安裝tomcat
#上傳apache-tomcat-9.0.27.tar.gz
#解壓
mkdir /soft
tar xf apache-tomcat-9.0.27.tar.gz -C /soft
ln -s apache-tomcat-9.0.27 tomcat
5.2 編輯tomcat配置文件
vim /soft/tomcat/conf/server.xml
      <Host name="tomcat.oldxu.com"  appBase="/code/tomcat"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="tomcat.oldxu.com.log" suffix=".txt"
               pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}" />
      </Host>
5.3 配置filebeat
[root@web02 filebeat]# vim filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /soft/tomcat/logs/tomcat.oldxu.com.log.*.txt
  json.keys_under_root: true    #默認Flase,還會將json解析的日志存儲至messages字段
  json.overwrite_keys: true     #覆蓋默認的key,使用自定義json格式的key
  tags: ["tomcat-access"]

- type:
  enabled: true
  paths:
    - /soft/tomcat/logs/catalina.out
  multiline.pattern: '^\d{2}'   #匹配以2數字開頭的
  multiline.negate: true
  multiline.match: after
  multiline.max_lines: 10000   #默認最大合并行為500,可根據實際情況調整
  tags: ["tomcat-error"]
  
output.elasticsearch:
  hosts: ["10.0.0.161:9200","10.0.0.162:9200"]
  indices:
    - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "tomcat-access"
    - index: "tomcat-error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "tomcat-error"

setup.ilm.enabled: false
setup.template.name: tomcat   #索引關聯的模板名稱
setup.template.pattern: tomcat-*
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容