Elastic日志系统-filebeat-redis-logstash-elasticsearch-kibana-6.8.0搭建流程

5 篇文章 0 订阅

搭建步骤

1. 需要准备的环境

系统环境
主机软件
192.168.100.104elasticsearch, es-head, redis, logstash
192.168.100.105filebeat, elasticsearch
192.168.100.106elasticsearch, kibana, filebeat

系统版本CentOS Linux release 7.7.1908 (Core)

1.1 软件版本

elastic系列为6.8.0版本,使用rpm包安装,简单,方便管理。

1.2 软件安装

elastic系列软件下载地址:https://www.elastic.co/cn/downloads/past-releases
这个地址可以下载各个版本的elastic系列软件包。

点击下载
elasticsearch下载
kibana下载
logstash下载
filebeat下载

将上面的rpm包下载好,上传到指定主机,用yum命令安装即可。

1.3 需求说明
  1. 所有日志收集后,通过index进行区分;
  2. 不同的服务,输出到不同的index中;
  3. 相同的服务,不在一个主机,也输入到一个index进行管理。
  4. index按照时间滚动,只保留指定天数(比如7天)的index,防止不断积累。

2. elasticsearch简单配置

2.1 elasticsearch配置

es简单配置如下

cluster.name: my-application   # 集群名称,3个节点的都要一样
node.name: node-104  # 节点名
path.data: /var/lib/elasticsearch  # 数据存储路径
path.logs: /var/log/elasticsearch # 日志输出路径
network.host: 192.168.100.104 # 主机IP
http.port: 9200  # 开放的端口
# 3节点
discovery.zen.ping.unicast.hosts: ["192.168.100.104:9300", "192.168.100.105:9300","192.168.100.106:9300"]

9200端口是http协议端口,主要用于外部通信
9300端口是tcp协议端口,主要用于集群间传递信息
在每台主机上修改好配置。启动es

systemctl start elasticsearch
systemctl status elasticsearch

启动成功后,可以通过api接口命令查看集群状态

curl http://192.168.100.104:9200
curl http://192.168.100.104:9200/_cat/nodes
curl http://192.168.100.104:9200/_cat/master

可以看到3节点都已经加到了集群中,且104被选为master。

2.2 es-head配置

需要配置nodejs环境。nodejs可以用yum安装,或者用源码安装。

yum install epel-release git -y
yum install nodejs npm -y

下载源码

cd /usr/local
git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm install grunt --save

安装

npm install -g grunt-cli  #安装grunt命令行工具grunt-cli
npm install grunt --save-dev  #安装grunt及其插件
grunt -version   #查看安装版本情况

修改elasticsearch配置文件,增加如下字段

http.cors.enabled: true
http.cors.allow-origin: "*"

修改es配置可以只在es-head需要连接的那台主机上进行。
修改elasticsearch-head目录下的Gruntfile.js文件

#其中增加一段配置
hostname: '0.0.0.0' 或者是 hostname: '*'

在这里插入图片描述
如果有端口冲突的情况,也可以修改下面的监听端口。
启动es-head

cd /usr/local/elasticsearch-head/   # 注意,一定要进入代码目录下启动,否则启动不了
nohup grunt server > ./grunt.log 2>&1 &
netstat -tnulp|grep 9100  # 如果没有端口冲突的情况,启动不会有什么异常

如果是长期使用es-head,可以考虑把它配置为系统服务。
可以参考https://blog.csdn.net/wind_2307154495/article/details/79402911
启动成功后就可以连接使用了。
在这里插入图片描述

3. kibana简单配置

配置文件:/etc/kibana/kibana.yml

server.port: 5601
server.host: "192.168.100.106"
server.name: "elk-106"
elasticsearch.hosts: ["http://192.168.100.106:9200"]  # es地址
kibana.index: ".kibana"
logging.dest: /var/log/kibana.log # 日志输出路径
i18n.locale: "zh-CN"   # 中文配置

注意:

  1. kibana如果不配置日志输出,一般日志会输出到/var/log/message里面,导致系统日志文件越来越大,且信息太多,难以区分,所以最好配置单独的日志输出路径。如果要配置日志输出路径,特别要注意权限文件,执行以下命令
touch /var/log/kibana.log
chown kibana.kibana  /var/log/kibana.log
# 或者直接改权限
chmod 666 /var/log/kibana.log

登录:http://192.168.100.106:5601
可以添加样例数据。打开之后如下显示:
在这里插入图片描述
es索引管理
在这里插入图片描述

4. elasticsearch配置用户认证,权限管理(X-pack)

生产中,需要对es进行管理,首先要有权限管理配置,否则任何人,只要能访问到es主机,知道端口,都可以对他进行管理操作,这是非常危险的。
如果是生产中,需要添加es认证,需要停服务,这个操作,需要提前跟开发沟通好,最好选择业务低峰期。这样对用户的影响就非常小。

  1. 生成秘钥,在主节点执行以下操作
/usr/share/elasticsearch/bin/elasticsearch-certutil ca
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 
mkdir /etc/elasticsearch/cert/
mv elastic-* /etc/elasticsearch/cert/
chmod 600 /etc/elasticsearch/cert/*
chown -R elasticsearch.elasticsearch /etc/elasticsearch/cert/elastic-*  # 更改权限

生成的配置文件elastic-certificates.p12需要copy到所有节点上/etc/elasticsearch/cert/目录下,注意保存秘钥密码
2. 秘钥密码认证,在所有节点执行
这一步一定不能少,否则es会启动报错,启动失败

/usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
/usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
  1. 所有节点增加如下配置

vim /etc/elasticsearch/elasticsearch.yml

# 分片数限制
cluster.max_shards_per_node: 50000
# ---------------------------------- X-pack ------------------------------------
xpack.license.self_generated.type: basic
#
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: cert/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: cert/elastic-certificates.p12
#
#-------ellasticsearch-head-------------
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
  1. 重启服务
sudo systemctl start elasticsearch.service
sudo systemctl status elasticsearch.service

要确保各节点服务启动正常,上面的命令执行缺一不可,如果启动异常可以通过日志检查错误。
5. 重启之后,生成账号密码(在其中一台上执行)

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto

执行后会生成一些默认账号的密码:
在这里插入图片描述
6. 配置kibana,配置账号密码
增加如下配置段
在这里插入图片描述
配置完成后,重启,重新刷新kibana页面

sudo systemctl restart kibana.service

在这里插入图片描述
输入你的账号密码既可以了。
常用的账号已经配置到了es中
账号配置流程:新建角色–>配置角色权限(集群权限,索引权限,可以使用正则匹配)–>配置用户(绑定角色)
配置角色权限也可以直接用已经配置好的角色,以权限角色运行。
角色权限参考:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-privileges.html#privileges-list-cluster

为了方便开发人员查看日志,我们新建一个只读账号
在这里插入图片描述
在这里插入图片描述
索引权限,可以使用正则匹配。只给只读权限。
如果是项目使用,在配置单独索引的读写权限。
在这里插入图片描述
单个用户,是可以选择多个角色的。
使用新建用户的账号密码登录。可以看到,用户看不到es的index界面,也不能修改kibana已经创建的索引。

下面是日志传送流程:
在这里插入图片描述

5. filebeat配置

/etc/filebeat/filebeat.yml

filebeat.inputs:
# 这一段是默认配置
- type: log
  enabled: false  # 是否启用,默认不启用
  paths:
    - /var/log/*.log
    
# 下面是我们自定义的配置
- type: log
  enable: true  # 启用配置,收集日志
  paths:
     - /tmp/002.txt # 日志路径,可以定义多个,可以使用正则
  tail_files: true # Filebeat从文件尾开始监控文件新增内容,非从头开始
  document_type: "test-redis" #设定Elasticsearch输出时的document的type字段 可以用来给日志进行分类。Default: log

  fields_under_root: true
  fields:  # 下面是自定义字段,可以用来区分日志类型,日志信息
     log_type: "test-redis"
     service: "test-redis"
     
- type: log
  enable: true
  paths:
     - /tmp/003.txt # 这个是测试路径,方便我们调试
  tail_files: true
  document_type: "testlog"
  exclude_files: ['.gz$']
  tags: "testlog"
  fields_under_root: true
  fields:
     log_type: "testlog"
     service: "testlog"

# java日志收集
- type: log
  enable: true
  paths:
     - /tmp/logs/catalina*
  exclude_files: ['.gz$']
  exclude_lines: ['^$']
  tags: "java"

# 定义多行的情况
  multiline:
  # 这个匹配,根据日志情况自定义
    pattern: '^\s*(\d{4}|\d{2})\-(\d{2}|[a-zA-Z]{3})\-(\d{2}|\d{4})'
    negate: true
    match: after
    max_lines: 1000
    timeout: 60
  fields_under_root: true
  fields:
     log_type: "java"
     service: "cms"

# 下面是输出配置
# 具体配置参考官网:https://www.elastic.co/guide/en/beats/filebeat/current/redis-output.html
# 输出中间,如果数据量不大的情况下,redis是很好的选择,数据量很大,建议使用kafka集群
output.redis:
  hosts: ["192.168.100.104:6379"]
  password: "changeme"   # redis一定要加上认证
  key: "filebeat" # 日志发布到的Redis列表或渠道的名称
  db: 0
  timeout: 5 #连接超时时间

如何对filebeat搜集的日志进行区分,然后保存到不同的index里面呢?
通过自定义字段

redis简单配置
主要是下面两个配置。

bind 192.168.100.104
requirepass changme

配置完成后,可以启动服务了。

systemctl restart filebeat
systemctl restart redis

注意观察日志啊。

6. logstash配置

日志通过filebeat到了redis,然后logstash从redis中取数据,输出到es中,在这一部,我们要通过自定义的字段,把日志输出到不同的index中。
配置如下:
vim /etc/logstash/conf.d/redis.conf

注意:logstash配置文件路径是/etc/logstash/conf.d/

# 从redis中拿数据
input {
   redis {
      data_type => "list"
      key => "filebeat"
      host => "192.168.100.104"
      port => "6379"
      password => "changme"
   }
}

# 输出到es中
output {
   # 通过自定义字段fields.service判断日志是属于哪个服务的,相同的服务输出到一个index中
   if [service] {
        elasticsearch {
            hosts => ["192.168.100.104:9200","192.168.100.105:9200","192.168.100.106:9200"]
            user => "elastic"
            password => "changme"
            index => "logstash-%{service}-%{+YYYY.MM.dd}"
            http_compression => true
        }
   }
  # 如果没有source字段匹配,就输出到另一个公共的index中 
   else {
    elasticsearch {
        hosts => ["192.168.100.104:9200","192.168.100.105:9200","192.168.100.106:9200"]
        user => "elastic"
        password => "changme"
        index => "logstash-other-%{+YYYY.MM.dd}"
        http_compression => true
  }
  }
}

配置之后,可以先对配置文件进行测试,确认配置没有问题

/usr/share/logstash/bin/logstash -t /etc/logstash/conf.d/redis.conf --debug

配置文件检查没有问题,重启logstash服务

sudo systemctl restart logstash

7. 开始测试

现在所有服务都已经配置完了。我们开始测试。
刚才在filebeat中定义了3个日志输入路径:

/tmp/002.txt 对应service:test-redis
/tmp/003.txt 对应service:testlog
/tmp/logs/catalina* 对应service:cms
写入日志到这些测试文件中。可以看到已经有index了
在这里插入图片描述
然后创建kibana的索引,方便进行查看
在这里插入图片描述
在这里插入图片描述
创建完索引之后,就可以在Discover里面看到了
在这里插入图片描述
在这里插入图片描述
其它几个kibana索引的创建方式。参考上面的即可。

至此,所有流程就全部打通了。
后面需要做的工作:

  1. nginx接入进来,展示nginx信息,站点访问情况,状态码等等
  2. es的index要按照日期,定时删除

es的定期删除策略

可以参考如下脚本:

# 保留15天内日志索引
date=$(date -d "-15 days" "+%Y.%m.%d")
# 获取要删除的索引
delete_index=$(curl -s -u elastic:l7oTPEalirnWNBZHnuWt http://192.168.100.104:9200/_cat/indices|grep test|grep ${date} |awk '{print $3}')

#
for index in ${delete_index}
do
   #echo $index
   curl -XDELETE -u elastic:changme http://192.168.100.104:9200/$index
done

使用es的定期删除策略

  1. 配置生命周期管理:3天后删除在这里插入图片描述在这里插入图片描述
  2. 配置索引模板,引用策略
    在kibana的开发工具中操作
PUT _template/logs_template
{
  "index_patterns": ["logs-*"],   # 匹配所有以logs开头的索引
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.lifecycle.name": "delete-3day",      
    "index.lifecycle.rollover_alias": "logs"    
  }
}

参考:
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/_applying_a_policy_to_our_index.html
注意:只有新索引会自动绑定策略,原来的不会变化,还是需要手动绑定

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值