ELK Stack——Beat配置

  • 搭建安全认证的ELK日志系统,其中讲到如何配置logstash的正则提取规则。
  • 官网filebeat文档
  • 观感最好的文章filebeat配置文件详解,详细讲解了每条配置项。

网上有不少关于filebeat配置文件的文章,但多半是基于5.x版本的,实际上跟6.x的语法的差别不会很大。
5.x版本需要一个个手动配置需要采集的日志。
6.x版本将一些常见的日志比如syslog、apache、nginx的配置规则给分离出来,通过参数开关来启用,降低了使用难度。

用nginx反代并启用访问限制

默认es不设防,所以至少要用nginx反代一下es做个http认证。

  • how-secure-kibana-nginx-centos
  • 启用https认证

官网博客给的配置文件有坑

  1. 安装并启用nginx服务
yum install epel-release
yum install nginx
systemctl start nginx
systemctl enable nginx

注意:因为SeLinux的关系会导致反代失败,查看/var/log/nginx/error.log看到Permission denied) while connecting to upstream,执行setsebool -P httpd_can_network_connect 1
临时关闭 setenforce 0 , 无需重启
修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled,然后重启

For setting up an HTTP authentication we will need the “.htaccess” and “.htpasswd” files, we can get both of them by installing “httpd-tools” package: yum install httpd-tools

  1. 接着创建密码文件
    htpasswd -c passwords test,会提示你输入密码然后创建了个passwords文件,选项-c表示创建,后期要添加新用户可以用htpasswd passwords test2

  2. 修改nginx配置文件默认位置/etc/nginx/nginx.conf,官网博客把两个auth_basic移动到了location外面导致认证无法通过

events {
  worker_connections  1024;
}
http {
  upstream elasticsearch {
    server 127.0.0.1:9200;
  }
  server {
    listen 8080;
    location / {
      auth_basic "Protected Elasticsearch";
      auth_basic_user_file passwords;
      proxy_pass http://elasticsearch;
      proxy_redirect off;
    }
  }
}

nginx -t验证配置文件是否规范

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

没问题之后可以使用nginx -c /etc/nginx/nginx.conf或者systemctl restart启动nginx

  1. 修改elasticsearch.yml文件
# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0
# network.bind_host: 127.0.0.1   #只有本机可以访问http接口

# 设置其它节点和该节点交互的ip地址,如果不设置它会自动设置,值必须是个真实的ip地址,就是给集群之间通信用的 
# network.publish_host: 192.168.0.1 

# 同时设置bind_host和publish_host上面两个参数 
# network.host: 192.168.0.1    #绑定监听IP

beat安全配置

使用beat来创建密钥库,这样在配置文件中可以使用你定义的密钥键来代替明文密码,这样别人就不知道es的登陆密码了。

winlogbeat keystore create
winlogbeat keystore add ES_PWD #会提示你输入密钥值
winlogbeat keystore add ES_PWD --force 强制更新
winlogbeat keystore list
winlogbeat keystore remove ES_PWD

如果密钥保存在文件里面,可以用
cat /file/containing/setting/value | winlogbeat keystore add ES_PWD --stdin --force
配置文件中调用变量
output.elasticsearch.password: "${ES_PWD}"
命令行调用变量
-E "output.elasticsearch.password=\${ES_PWD}"

注意: 虽然每次生成filebeat.keystore的内容不一样,但是复制后依然可以到处使用

连接到es和kibana

如果hosts中没有指定端口,es默认是9200,kibanas默认是5601

setup.kibana:
  host: "192.168.138.137:8888"
  username: "${USER}"
  password: "${PWD}"
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["192.168.138.137:80"]

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  username: "${ES_USER}"
  password: "${ES_PWD}"

运行filebeat setup -e初始化环境,该setup命令加载建议的索引模板以写入Elasticsearch,并部署示例仪表板以可视化Kibana中的数据。这是一次性设置步骤。
该-e标志是可选的,并将输出发送到标准错误而不是syslog。

Filebeat

filebeat自带了些常用的日志解析模块,比如web服务器apache,nginx,iis,数据库mysql,mongodb,postgresql

web日志采集

nginx日志变量
Apache日志变量

问题:一台服务器上有多个网站,需要将每个网站的日志分离开来。
以iis为例,修改iis日志输出的格式,增加服务名称(既cs-host)字段,同时module\iis\access\ingest\default.json也要增加cs-host的解析规则。
apache日志变量%v 对该请求提供服务的标准ServerName
nginx日志变量$hostname

修改default.json,如果在_ingest/pipeline/已存在,可以通过PUT方法更新。

注意默认情况Windows2008 R2下IIS并没有启用cs-referer字段(Windows 2012版本以上才默认启用),将其修改为host字段。提取规则是从上到下依次匹配的,匹配失败会报错。
顺带让其能匹配带中文的url
(?(?:/[A-Za-z0-9$.+!*'(){},~:;=@#%&_\\-\u4e00-\u9fa5]*)+)
最终是这个样子的

      "patterns":[
        "%{TIMESTAMP_ISO8601:iis.access.time} %{IPORHOST:iis.access.server_ip} %{WORD:iis.access.method} (?(?:/[A-Za-z0-9$.+!*'(){},~:;=@#%&_\\-\u4e00-\u9fa5]*)+) %{NOTSPACE:iis.access.query_string} %{NUMBER:iis.access.port} %{NOTSPACE:iis.access.user_name} %{IPORHOST:iis.access.remote_ip} %{NOTSPACE:iis.access.agent} %{NOTSPACE:iis.access.host} %{NUMBER:iis.access.response_code} %{NUMBER:iis.access.sub_status} %{NUMBER:iis.access.win32_status} %{NUMBER:iis.access.request_time_ms}",

然后filebeat run -e显示调试信息。

在filebeat.yml里面启用指定module,tagsfields可以在input节点中使用。

filebeat.modules:
- module: apache2
  # Access logs
  access:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths:

    # Input configuration (advanced). Any input configuration option
    # can be added under this section.
    input:
      type: log
      paths:
       - D:/apache2/log/www.test.com-access_log*.log
      exclude_lines: ["^#"]
      fields_under_root: true
      fields:
        apache2.access.host: "www.test.com"

经过测试,module里面不支持多个input,后面的input的值会覆盖前面的,无法分开读取多个不同路径的日志。
后续用logstash进行处理

system模块

这是用来解析Linux系统日志的模块。
查看/usr/share/filebeat/module/system/auth/manifest.yml可以知道它是解析/var/log里面的secureauth.log,既linux的登陆日志。

var:
  - name: paths
    default:
      - /var/log/auth.log*
      - /var/log/secure*

需要在ES端安装插件,/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip,安装插件后需要重启ES服务使其生效。

如果服务器使用的是非UTC+0时区,需要修改mainfest.yml,启用时区转化。

  - name: convert_timezone
    default: true

注意: 需要在ES端删除原有的pipelinecurl -XDELETE 'http://localhost:9200/_ingest/pipeline/filebeat-*'

否则就会像这样,比实际时间又快了8个小时,这是因为ES在转化时间戳时默认按照UTC时区处理,而filebeat本身读取到的时间已经是UTC+8的。

当然还可以修改pipeline.json来修正时区,但是这样反而要求每台服务器设置的时区必须都是一致的,这样也很麻烦。

    "date": {
        "target_field": "@timestamp",
        "formats": ["MMM d HH:mm:ss", "MMM dd HH:mm:ss"],
        "ignore_failure": true,
        "field": "system.syslog.timestamp",
        "timezone": "CST"
    }

WinlogBeat

达到了开箱即用的程度,这里修改了winlogbeat.ymlname的值为服务器ip方便审计。
General部分还可以设置tags: ["service-X", "web-tier"]fields用来标记和区分服务器的归属或者用途,支持中文。

name: "192.168.45.132"

# The tags of the shipper are included in their own field with each
# transaction published.
tags: ["service-X", "web-tier"]

# Optional fields that you can specify to add additional information to the
# output.
fields:
  env: 测试

最为重要的Windows登陆日志解析后如下图


设置自启动服务

手动运行beat没有异常之后,方便无人值守设置成服务。

  • Windows
    beat的解压目录有个poweshell脚本。以winlogbeat为例,执行PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-winlogbeat.ps1
  • Linux
    直接通过软件包的方式安装,记得systemctl enable 服务名来设置成自启动服务。

你可能感兴趣的:(ELK Stack——Beat配置)