日志系统搭建(elk7.x)

本秂侑毒 提交于 2020-08-14 10:24:48

使用elastic stack搭建日志收集分析系统


随着公司的发展,需要一个日志分析系统,来分析用户数据,为了调研,所以先使用elastic stack搭建了一个单节点的日志收集分析系统。

使用技术:elasticsearch7.1.1、cerebro0.9.0、kibana7.1.1、filebeat7.1.1。


1. elasticsearch的搭建

  • elasticsearch的搭建
  1. 先在官网下载es7.1.1安装包,上传到服务器之后解压。
  2. 新建esuser用户。es出于安全考虑,不推荐使用root用户运行。
# 添加用户组
groupadd esgroup
# 添加用户
useradd -g esgroup esuser
# 修改密码
passwd esuser
  1. 修改elasticsearch目录权限。
chown -R esuser:esgroup elasticsearch-7.1.1/
  1. 选择合适的位置,新建es_data(存储es数据),es_logs(存储es日志)目录,并修改文件夹权限为 esuser:esgroup。
mkdir es_data
mkdir es_logs
chown -R esuser:esgroup es_data
chown -R esuser:esgroup es_logs
  1. 修改es配置文件。
cd config/
vim elasticsearch.yml

# 以下是配置文件需要修改的地方
-----
# es集群名,用于扩展为多节点集群时的自动识别
cluster.name: wyc-log
# 当前节点名
node.name: node-1
# 数据存储路径
path.data: /home/elk/data/es_data
# 日志存储路径
path.logs: /home/elk/logs/es_logs
# 在centos6.x不支持SecComp功能,所以需要修改此设置为false,centos7.x不需要修改此配置
bootstrap.system_call_filter: false
# 绑定ip地址,0.0.0.0表示可以任意ip访问
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
# 初始化参与竞选master的节点
cluster.initial_master_nodes: ["node-1"]
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# 跨域访问允许的域名地址(允许所有域名)
http.cors.allow-origin: /.*/
-----
  1. 启动es。启动后访问ip:9200,可以正常访问。
su esuser
bin/elasticsearch

出现如下错误:

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max number of threads [1024] for user [esuser] is too low, increase to at least [2048]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决:

# 修改以下配置
vim /etc/security/limits.conf
# 添加如下配置
esuser soft nofile 65536
esuser hard nofile 65536
esuser soft nproc 4096
esuser hard nproc 4096


vim /etc/sysctl.conf
# 添加如下配置
vm.max_map_count=655360

# 重新加载配置
sysctl -p
  1. 启动x-pack安全认证功能。为了提高es集群的安全性,可以使用es7.x自带的免费版x-pack安全认证功能。
# 修改配置文件
vim config/elasticsearch.yml
#添加如下配置
xpack.security.enabled: true


# 生成证书
bin/elasticsearch-certutil ca -out config/elastic-certificates.p12 -pass ""


# 修改配置文件
vim config/elasticsearch.yml
#添加如下配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12


# 生成密码(以下两个命令2选1)
# 随机密码
bin/elasticsearch-setup-passwords auto
# 自定义密码
bin/elasticsearch-setup-passwords interactive 
  1. 再次访问ip:9200,输入用户名密码,登陆成功。

2. cerebro的搭建

  • cerebro的搭建
  1. 下载安装包,上传到服务器,解压,修改配置文件。
vim conf/application.conf
# 修改以下配置
hosts = [
  {
    host = "http://ip:9200"
    name = "wyc-log"
    type = basic
    auth = {
      username = "elastic"
      password = "xxx"
    }
  }
]
  1. 因为我本地环境jdk版本为1.7,而cerebro要求jdk版本为1.8,所以需要修改启动命令。
vim bin/cerebro
# 修改以下配置
# 在355行,修改java_cmd为jdk1.8的java命令
eclare java_cmd=/home/jdk/bin/java
  1. 启动cerebro。
# -Dhttp.port 指定启动端口
bin/cerebro -Dhttp.port=1235

3. kibana的搭建

  • kibana安装
  1. 从官网下载安装包,上传到服务器,解压。
  2. 修改配置文件。
vim config/kibana.yml
# 修改以下配置

-----
# 启动端口,默认5601
server.port: 5610
server.host: "xxx.xxx.xxx.xxx"
elasticsearch.hosts: ["http://xxx.xxx.xxx.xxx:9200"]
elasticsearch.username: "elastic"
elasticsearch.password: "xxx"
-----
  1. 启动kibana。
bin/kibana
  1. 登录查看。在浏览器输入ip:5610,出现如下界面,输入用户名、密码,登陆成功。
    登录
    首页

4. fielbeat的搭建

  • fielbeat的搭建
  1. 从官网下载安装包,上传到服务器,解压缩。
  2. 修改配置文件。
cp filebeat.yml wyc-es-query.yml
vim wyc-es-query.yml
# 以下是需要修改的配置项

-----
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /xxx/*.log

setup.template.settings:
  index.number_of_shards: 1
  
# 如果使用自定义索引名,则需要指定以下两个配置
setup.template.name: "esquerylog"
setup.template.pattern: "esquerylog-*"

# 7.x的版本中需要禁用此索引生命周期,否则在指定es索引名字的时候会有问题
setup.ilm.enabled: false

output.elasticsearch:
  hosts: ["172.18.1.8:9200"]
  index: "esquerylog-%{+yyyy.MM}"
  username: "elastic"
  password: "xxx"

# 配置自动解析json
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
  - decode_json_fields:
      fields: ["message"] #要进行解析的字段
      target: "querylog" #json内容解析到指定的字段,如果为空(“”),则解析到顶级结构下
      overwrite_keys: false #如果解析出的json结构中某个字段在原始的event(在filebeat中传输的一条数据为一个event)中也存在,是否覆盖event中该字段的值,默认值:false
      process_array: false #数组是否解码,默认值:false
      max_depth: 1 #解码深度,默认值:1
-----

  1. 启动filebeat。
./filebeat -c wyc-es-query.yml -e
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!