日志实时分析平台ELK部署(+shield安全组件)

来源:互联网 发布:萤火虫软件 编辑:程序博客网 时间:2024/04/28 11:07


  1. 安装ELK

elasticsearch,logstash,kibana三个组件直接下载rpm文件安装即可


  1. Logstash

logstash的配置由三部分组成 input,filter,output

分别是输入插件,过滤器插件,输出插件

配置都是依赖插件的使用,比如我们这里输入用了tcp插件,可以使用bin/logstash-pluginlist查看当前的插件列表(物理目录 vendor/bundle/jruby/1.9/gems/ 目录下)

 使用bin/logtash-plugininstall 命令进行插件安装。

input输出插件:

logstash收集日志,可以是读取文件(file插件),socket传输(tcp插件,udp插件)等方式。

filter过滤器插件:

对内容进行过滤,比如日期格式化,json处理等等。例如:

filter {

  grok {

      match =>["message","%{HTTPDATE:logdate}"]

  }

  date {

     match =>["logdate","yyyy-MM-dd HH:mm:ss Z"]

  }

}

output 输出插件:

类似正文中使用的输出到elasticsearch ,使用标准输出到当前控制台(非服务启动就能看到,bin/logstash-f logstash.conf)

加上stdin和stdout后的配置文件如:

input {

  stdin { }

  tcp {

    mode => "server"

    host => "192.168.88.87"

    port => "4560"

    type => "UIC"

  }

}

output {

  stdout { codec => rubydebug }

  if [type] == "UIC" {

    elasticsearch {

      action => "index"

      hosts =>"192.168.88.87:9200"

      index => "uic"

    }

  }

}

注意:如果logstash需要往elasticsearch中写入日志,那么需要先安装和启动elasticsearch

我们这里elasticsearch是使用了shield安全组件,所以需要在elasticsearch中为logstash创建用户

sudo shield/esusersuseradd  logstash-user  -r logstash -p password

然后elasticsearchssl 的配置如下:

elasticsearch{

      action => "index"

    #开启证书验证后,会检查访问域名和证书上的是否一致,所以下面hosts就必须用域名

      ssl_certificate_verification => true

      user =>"logstash-user"

      password => "password"

      ssl => true

      hosts =>"log.example.com:9200"

      index => "uic"

  }


3.Elasticsearch

 

先安装两个插件:

elasticsearch-head 用于浏览数据

sudo bin/plugin installmobz/elasticsearch-head

shield 安全组件  (这里包含license,shield两个插件)

sudo bin/plugin install license

sudo bin/plugin install shield

尝试添加用户:

/bin/shield/esusers useraddes_admin -p password -r admin  //创建用户es_admin,并设置admin的角色

设置elasticsearch的ssl:

vi/etc/pki/tls/openssl.cnf 设置

[ v3_ca ]

subjectAltName= IP:192.168.88.87

 在CA目录下创建两个初始文件:

touch index.txt serial

echo 01 > serial


创建根证书

sudo openssl genrsa -outprivate/cakey.pem 2048

sudo chmod 600private/cakey.pem

sudo openssl req -new -x509-key private/cakey.pem -out cacert.pem

———————

Country Name (2 letter code)[XX]:CN

State or Province Name (fullname) []:SC

Locality Name (eg, city)[Default City]:CD

Organization Name (eg, company)[Default Company Ltd]:com

Organizational Unit Name (eg,section) []:medxi

Common Name (eg, your name oryour server's hostname) []:log.medxi.com

Email Address []:server@medxi.com

———————

给elasticsearch创建证书,利用java的 keytool创建,(证书在jks文件中)

官网上列出了创建的方式如:

keytool -importcert -keystorenode01.jks -file cacert.pem -alias my_ca(通过导入CA的证书,这种方式创建的证书被认为协议不安全)

keytool -genkey -alias node01-keystore node01.jks -keyalg RSA -keysize 2048 -validity 712 -extsan=dns:node01.example.com,ip:192.168.1.1(创建key,推荐)

keytool -certreq -alias node01-keystore node01.jks -file node01.csr -keyalg rsa -extsan=dns:node01.example.com,ip:192.168.1.1(创建csr ,推荐)

这里我创建的证书,放在了/etc/elasticsearch/certs/下

修改/etc/elasticsearch/elasticsearch.yml 配置文件

添加以下配置

action.auto_create_index: .security

shield.ssl.keystore.path: /etc/elasticsearch/cert/node01.jks

shield.ssl.keystore.password: yourpassword

shield.http.ssl: true

 

————————几个基础配置我也贴这里——————

cluster.name: es_cluster

node.name: node-0

path.data: /usr/local/dev/elasticsearch/data

path.logs: /usr/local/dev/elasticsearch/logs

network.host: 192.168.88.87

http.port: 9200

—————————基础配置结束———————————————

然后重启elasticsearch,访问的时候就需要用https来访问了。


4.Kibana


因为kibana数据都来自elasticsearch,所以我们先到elasticsearch中创建kibana的用户

sudo esusers useraddkibana4-server -r kibana4_server -p password

修改/etc/elasticsearch/role_mapping.yml

添加

kibana4_server:

  - “cn=log.medxi.com,ou=medxi,o=com"

重启elasticsearch服务

kibana 安装shield插件

bin/kibana plugin --install kibana/shield/2.3.5

在相关目录下创建证书

sudo openssl genrsa -out log-medxi.key 2048

sudo openssl req -new -key log-medxi.key -out log-medxi.csr(填写的信息要跟服务器根证书一样)

sudo openssl ca -in log-medxi.csr -out log-medxi.crt

配置kibana的配置文件

server.port: 5601

server.host: "0.0.0.0"

#记得这里就需要https

elasticsearch.url: "https://192.168.88.87:9200"

kibana.index: ".kibana"

#刚刚创建的kibana用户和密码

elasticsearch.username: "kibana4-server"

elasticsearch.password: "medxikibana"

#创建好的证书

server.ssl.cert: /usr/local/dev/medxi/medxi.crt

server.ssl.key: /usr/local/dev/medxi/medxi.key

#在elasticsearch的地方我们使用的是jks文件,所以这里我没有配置(当然也可以生成证书文件)

#elasticsearch.ssl.cert: /usr/local/dev/medxi/log-medxicrt

#elasticsearch.ssl.key: /usr/local/dev/medxi/log-medxi.key

#指定根证书

elasticsearch.ssl.ca: /etc/pki/CA/cacert.pem

#因为我们使用的是自己的签发的证书,上面又没有引用elasticsearch的证书,所以这里  #设置false

elasticsearch.ssl.verify: false

 

shield.encryptionKey: "something_secret"

shield.sessionTimeout: 600000

shield.skipSslCheck: true

启动kibana服务,到这里就搭建完成了。

 

  1. 下面讲讲我部署时,踩过的坑

No.1  java运行环境,所有用户都必须能访问到java环境,(比如logstash以root用户启动,elasticsearch不能以root用户启动)

No.2  权限问题,elasticsearch是非root用户运行,所以所有它能操作的文件夹都有权限操作,主要是:

配置文件夹(/etc/elasticsearch/),目录下的所有文件和文件夹

日志文件夹(配置文件指定如/var/log/elasticsearch/logs/),目录下面的所有文件和文件夹

数据文件夹(配置文件指定如/var/elasticsearch/data/),目录下面的所有文件和文件夹

No.3  不能访问,先打开防火墙拦截

firewall-cmd  --zone=public  --add-port=5601/tcp  --permanent(加了就永久开启)

No.4 使用jdk8(Open jdk或Oracle jdk)版本,因为低版本不支持我们自己签发证书的算法,比如你使用jdk7可能看到如下错误:

ERROR][shield.ssl] [node-0] unsupported ciphers [[TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA]] wererequested but cannot be used in this JVM. If you are trying to use ciphers

with a key length greater than 128 bits on an Oracle JVM, you willneed to install the unlimited strength JCE policyfiles. Additionally, please ensure the PKCS11 provider is enabled for your JVM.

当然可以去尝试扩展jre的支持,但是我觉得升级jdk版本是最省事的。(如果jdk8仍然遇到此问题,在elasticsearch.yml配置文件中添加 

     shield.ssl.ciphers: ["TLS_RSA_WITH_AES_128_CBC_SHA256","TLS_RSA_WITH_AES_128_CBC_SHA" ]      )


No5. 自己签发的证书,java环境认为不安全,错误如下:

PKIXpath building failed:sun.security.provider.certpath.SunCertPathBuilderException: unable to findvalid certification path to requested target{:class=>"Manticore::ClientProtocolException", :level=>:error}

解决办法,添加到java环境

sudokeytoo  -importcert  -file ~/example.crt  -alias example -keystore$(echoa_home)/jre/lib/security/cacerts -storepass changeit


0 0
原创粉丝点击