日志解决方案filebeat+redis+elk

Posted Sicc1107

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日志解决方案filebeat+redis+elk相关的知识,希望对你有一定的参考价值。

日志解决方案filebeat+redis+elk

系统架构图:
在这里插入图片描述
日志采集流程:
filebeat 采集程序日志,并将日志发送到redis,创建对应的key
logstash从redis中获取日志,并按照对应log_source 推送到elasticsearch 集群中,并根据log_source创建对应索引
kibana展现日志数据

安装依赖:

yum install vim unix2dos wget curl curl-devel expect expect-devel
yum install gcc glibc glib2 libgcc glibc-devel glib2-devel

1 redis安装配置

tar -xzvf redis-5.0.5.tar.gz
cd redis-5.0.5/
make
make install
cd utils/
./install_server.sh
/etc/init.d/redis_6379 status
netstat -antupl |grep :6379
/etc/init.d/redis_6379 stop

which redis-server在/usr/local/bin/redis-server
配置文件放在/etc/redis/6379.conf文件
#redis-cli
>set aa aavalue
>get aa 即可测试。

2 安装JDK:

tar -zxvf jdk-8u60-linux-x64.tar.gz
mv jdk1.8.0_60 /usr/local/
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_60
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java -version

3 安装elasticsearch:

useradd elk   #新增elk用户
echo '123456' | passwd --stdin elk
#调整系统参数
echo "vm.max_map_count = 65536" >> /etc/sysctl.conf
sysctl -p
vim /etc/security/limits.conf ==》新增如下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536

安装配置es(单节点)
tar xf elasticsearch-6.6.1.tar.gz
mv elasticsearch-6.6.1 /usr/local/elasticsearch
cd /usr/local/elasticsearch/config/
cp elasticsearch.yml elasticsearch.yml.bak
> elasticsearch.yml
vim elasticsearch.yml #配置文件修改成如下
cluster.name: "master-node"
node.name: master
transport.host: 0.0.0.0
transport.publish_host: 0.0.0.0
transport.bind_host: 0.0.0.0
network.host: 0.0.0.0
http.port: 9200
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/logs
http.cors.enabled: true
http.cors.allow-origin: "*"

多节点配置则为:
cluster.name: master-node # 集群中的名称
node.name: master # 该节点名称
node.master: true # 意思是该节点为主节点
node.data: false # 表示这不是数据节点
network.host: 0.0.0.0 # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200 # es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.10.10.1", "192.10.10.2", "192.10.10.3"] # 配置自动发现
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/logs
http.cors.enabled: true
http.cors.allow-origin: "*"
数据节点配置基本一致,需要修改
node.name: data-node2
node.master: false
node.data: true
修改完成后,先启动主节点elas,再启动数据节点

授权 elk elasticsearch目录权限
su elk
nohup /usr/local/elasticsearch/bin/elasticsearch &
验证 elasticsearch
curl 127.0.0.1:9200

4.安装kibana:

tar xf kibana-6.6.1-linux-x86_64.tar.gz
mv kibana-6.6.1-linux-x86_64 /usr/local/kibana
#修改配置文件
grep '^[a-Z]' /usr/local/kibana/config/kibana.yml
server.port: 5601 server.host: "0.0.0.0" #监听地址 elasticsearch.hosts: ["http://192.10.10.1:9200"] #es地址,如果是集群则依然配置为主节点IP kibana.index: ".kibana" #在es中添加.kibana索引 i18n.locale: "zh-CN" #设置为中文(6.8.1版本有这个功能)
#后台运行 Kibana:
nohup /user/local/kibana/bin/kibana &
#浏览器访问:http://ip:5601

5.安装logstash(依赖jdk1.8环境)

tar xf logstash-6.6.1.tar.gz
mv logstash-6.6.1 /usr/local/logstash
#logstash 安装multiline插件
./usr/local/logstash/bin/logstash-plugin install logstash-filter-multiline
#具体配置文件后续案例分析

6.安装filebeat

tar xf filebeat-6.8.1-linux-x86_64.tar.gz
mv filebeat-6.8.1-linux-x86_64 /usr/local/filebeat
#具体配置文件后续案例分析 此时安装部分已经完成

修改filebeat配置文件 ./filerbeat -c filebeat_dc.yml

filebeat.inputs:
- type: log
  enabled: true
  path:
    - /tmp/c.log
  fields:
    log_type: tomcat
output.redis:
  hosts: ["192.1.3.68"]
  port: 6379
  password: "123456"
  key: "data"
  datatype: "list"
  db: 1

修改logstash 启动配置文件 ./logstash -f haha.yml

input {
  redis {
    data_typr => "list"
    key => "data"
    host => "192.1.3.68"
    port => 6379
    password => "123456"
    batch_count => 1
    threads => 5
    add_file => {
      "[@metadata][mytomcat]" => "tomcat_accessstatus_filter_log"
    }
  }
}
filter {
  grok {
    match => { "message" => "{TIMESTAMP_ios8601:access_time\\s+\\[(?<loglevel>[\\s\\S]*)\\]\\s"+\\[%{DATA:exception_info\\}](?<tomcatcontent>[\\s\\S]*) }
  }
  data {
   # match => ["logdate","MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]
    match => ["logdate","yyyy-MM-dd HH:mm:ss,SSS"]
    locale => "en"
    timezone => "+08:00"
    remove_field => "logdate"
    target => "@timestamp"
  }
}
output {
  stdout { codec => rubydebug }
  if [fields][log_type] == "tomcat" {
    elasticsearch {
      hosts => ["http:192.1.3.68:9200"]
      index => "logstash-tomcat-%{+YYY.MM.dd}"
    }
  }
}

验证操作
1先看数据是否能推送至 redis
2验证 logstash是否能 再redis中取走数据 存储至elasticsearch
如果不行 一般是配置文件出错 看报错解决问题

以上是关于日志解决方案filebeat+redis+elk的主要内容,如果未能解决你的问题,请参考以下文章

filebeat+redis+elk日志平台搭建

elk+filebeat+redis日志系统部署

Filebeat +Redis+ELK处理Nginx日志系统

6.3.1版本elk+redis+filebeat收集docker+swarm日志分析

ELK——Filebeat介绍及部署

nginx access 日志 ELK 加入REDIS 防止日志丢失 filebeat7.4.2 发送日志到redis 6.2.2