elk的架构演变

image.png
image.png
image.png
image.png

第一章: filbeat模块module
作用:
可以将特定的服务的普通日志转成json格式

1.查看filbeat模块路径
rpm -qc filebeat 

2.配置模块
filebeat添加模块相关参数
=============================
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true
  reload.period: 10s
=============================

3.查看并激活模块
filebeat modules list
filebeat modules enable nginx
filebeat modules list

4.配置filebeat的nginx模块
[root@db-01 ~]# cat /etc/filebeat/modules.d/nginx.yml 
- module: nginx
  access:
    enabled: true
    var.paths: ["/var/log/nginx/bbs.log"]

  error:
    enabled: true
    var.paths: ["/var/log/nginx/error.log"]

5.配置filebeat根据日志类型做判断
[root@db-01 ~]# cat /etc/filebeat/filebeat.yml 
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true
  reload.period: 10s

output.elasticsearch:
  hosts: ["10.0.0.51:9200"]
  indices:
    - index: "nginx_bbs_access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        fileset.name: "access"
    - index: "nginx_error-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        fileset.name: "error"

setup.template.name: "nginx"
setup.template.pattern: "nginx_*"
setup.template.enabled: false
setup.template.overwrite: true

6.配置nginx日志为正常日志
nginx -t
systemctl restart nginx
> /var/log/nginx/bbs.log 
tail -1 /var/log/nginx/bbs.log 	

7.安装es插件
cd /usr/share/elasticsearch/
./bin/elasticsearch-plugin install file:///data/soft/ingest-geoip-6.6.0.zip
./bin/elasticsearch-plugin install file:///data/soft/ingest-user-agent-6.6.0.zip

8.重启es
systemctl restart elasticsearch
删除以前的旧索引

9.重启filebeat
systemctl restart filebeat

10.kibana添加索引
注意:
error添加的时候选择 read_timestamp

11.查看日志是否被解析成了json格式


报错1:
[root@db-01 ~]# filebeat modules list
Error in modules manager: modules management requires 'filebeat.config.modules.path' setting

报错2:
2019-09-11T09:04:40.562+0800	ERROR	pipeline/output.go:100	Failed to connect to backoff(elasticsearch(http://10.0.0.51:9200)): Connection marked as failed because the onConnect callback failed: Error loading pipeline for fileset nginx/access: This module requires the following Elasticsearch plugins: ingest-user-agent, ingest-geoip. You can install them by running the following commands on all the Elasticsearch nodes:
    sudo bin/elasticsearch-plugin install ingest-user-agent
    sudo bin/elasticsearch-plugin install ingest-geoip

第二章: filebeat使用模块收集mysql日志

yum -y install mariadb mariadb-server
1.配置mysql错误日志和慢日志路径
编辑my.cnf
log-error=/var/lib/mysql/error.log
slow_query_log=ON
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=3

2.重启mysql并制造慢日志
systemctl restart mysql 
慢日志制造语句
select sleep(2) user,host from mysql.user ;

3.确认慢日志和错误日志确实有生成

4.激活filebeat的mysql模块
filebeat modules enable mysql

5.配置mysql的模块
- module: mysql
  error:
    enabled: true
    var.paths: ["/var/lib/mysql/error.log"]

  slowlog:
    enabled: true 
    var.paths: ["/var/lib/mysql/slow.log"]
	
6.配置filebeat根据日志类型做判断
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true
  reload.period: 10s

output.elasticsearch:
  hosts: ["10.0.0.114:9200"]
  indices:
    - index: "nginx_access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        fileset.module: "nginx"
        fileset.name: "access"
    - index: "nginx_error-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        fileset.module: "nginx"
        fileset.name: "error"
		
    - index: "mysql_slowlog-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        fileset.module: "mysql"
        fileset.name: "slowlog"
    - index: "mysql_error-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        fileset.module: "mysql"
        fileset.name: "error"

setup.template.name: "nginx"
setup.template.pattern: "nginx_*"
setup.template.enabled: false
setup.template.overwrite: true

7.重启filebeat
systemctl restart filebeat

第三章: 使用input的docker类型收集docker日志

0.docker安装命令
rm -fr /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y

1.启动2个nginx容器
docker run -d -p 80:80 nginx
docker run -d -p 8080:80 nginx

2.修改filebeat配置文件
filebeat.inputs:
- type: docker
  containers.ids: 
    - '*'

output.elasticsearch:
  hosts: ["10.0.0.114:9200"]
  indices:
    - index: "docker_access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        stream: "stdout"
    - index: "docker_error-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        stream: "stderr"

setup.template.name: "docker"
setup.template.pattern: "docker-*"
setup.template.enabled: false
setup.template.overwrite: true

3.重启filebeat 
systemctl restart filebeat

4.访问nginx制造日志
curl 127.0.0.1/11111111111111111111
curl 127.0.0.1:8080/22222222222222222222
  
5.es-head和kibana查看

第四章: 收集docker日志可以早下班版
场景:
容器1: nginx
容器2: mysql

理想中的情况:
docker_nginx-6.6.0-2019.09
docker_mysql-6.6.0-2019.09

前提条件:
存在可以唯一区分容器业务类型的key
docker-compose安装 报错解决地址https://www.cnblogs.com/eddie1127/p/12003358.html
容器编排: docker-compose

1.安装docker-compose 
yum install -y python2-pip 
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install docker-compose

2.编写docker-compose文件
[root@db-02 ~]# cat docker-compose.yml 
version: '3'
services:
  nginx:
    image: nginx:latest
    labels:
      service: nginx
    logging:
      options:
        labels: "service"
    ports:
      - "80:80"
  db:
    image: nginx:latest
    labels:
      service: db 
    logging:
      options:
        labels: "service"
    ports:
      - "8080:80"

3.删除以前的容器!谨慎操作!
docker rm -f  $(docker ps -a -q)

4.使用docker-compose启动docker容器
docker-compose up -d 


5.配置filebeat配置文件
filebeat.inputs:
- type: log
  enabled: true 
  paths:
    - /var/lib/docker/containers/*/*-json.log
  json.keys_under_root: true
  json.overwrite_keys: true

output.elasticsearch:
  hosts: ["10.0.0.114:9200"]
  indices:
    - index: "docker_nginx_access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        attrs.service: "nginx"  
        stream: "stdout"
    - index: "docker_nginx_error-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        attrs.service: "nginx"  
        stream: "stderr"
    - index: "docker_db_access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        attrs.service: "db"  
        stream: "stdout"
    - index: "docker_db_error-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        attrs.service: "db"  
        stream: "stderr"

setup.template.name: "docker"
setup.template.pattern: "docker_*"
setup.template.enabled: false
setup.template.overwrite: true

6.重启filebeat
systemctl restar filebeat

7.访问nginx制造日志
curl 127.0.0.1/nginxxxxxxxxx
curl 127.0.0.1:8080/dbbbbbbbbbbbbbbbbb

8.es-head和kibana查看

第五章: 收集docker日志涨薪版

0.创建容器日志目录
mkdir /opt/{nginx,mysql}

1.将容器的日志目录挂载到宿主机
docker ps 
docker cp /etc/nginx/nginx.conf 容器ID:/etc/nginx/nginx.conf
docker commit 容器ID nginx:v3
docker rm -f  $(docker ps -a -q)
docker run -d -p 80:80 -v /opt/nginx:/var/log/nginx nginx:v3
docker run -d -p 8080:80 -v /opt/mysql:/var/log/nginx nginx:v3

2.修改filebeat配置文件
filebeat.inputs:
- type: log
  enabled: true 
  paths:
    - /opt/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx_access"]

- type: log
  enabled: true 
  paths:
    - /opt/nginx/error.log
  tags: ["nginx_error"]

- type: log
  enabled: true 
  paths:
    - /opt/mysql/access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["mysql_access"]

- type: log
  enabled: true 
  paths:
    - /opt/mysql/error.log
  tags: ["mysql_error"]

output.elasticsearch:
  hosts: ["10.0.0.114:9200"]
  indices:
    - index: "docker_nginx_access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        tags: "nginx_access"
    - index: "docker_nginx_error-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        tags: "nginx_error"
    - index: "docker_db_access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        tags: "mysql_access"
    - index: "docker_db_error-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        tags: "mysql_error"

setup.template.name: "docker"
setup.template.pattern: "docker_*"
setup.template.enabled: false
setup.template.overwrite: true

3.重启filebeat
systemctl restart filebeat

4.访问nginx制造日志
curl 127.0.0.1/nginxxxxxxxxx
curl 127.0.0.1:8080/dbbbbbbbbbbbbbbbbb

第六章: 使用缓存服务来缓解ES压力

1.安装配置redis
yum install redis -y
systemctl start redis 
redis-cli set k1 v1 
redis-cli get k1 

2.配置filebeat
filebeat.inputs:
- type: log
  enabled: true 
  paths:
    - /var/log/nginx/bbs.access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["access"]

- type: log
  enabled: true 
  paths:
    - /var/log/nginx/error.log
  tags: ["error"]

output.redis:
  hosts: ["127.0.0.1"]
  keys:
    - key: "nginx_access"
      when.contains:
        tags: "access"
    - key: "nginx_error"
      when.contains:
        tags: "error"

setup.template.name: "nginx"
setup.template.pattern: "nginx_*"
setup.template.enabled: false
setup.template.overwrite: true

3.确保nginx日志为json格式
>/var/log/nginx/bbs.access.log 
ab -c 10 -n 100 http://10.0.0.114/oooooooooo
tail -1 /var/log/nginx/bbs.access.log 

4.启动filebeat并测试是否能存到redis里
systectl restart filebeat

redis-cli
keys * 
TYPE nginx_access 
LLEN nginx_access 
LRANGE nginx_access 1 2 

5.安装配置logstash
rpm -ivh logstash-6.6.0.rpm

[root@db-01 /data/soft]# cat /etc/logstash/conf.d/redis.conf 
input {
  redis {
    host => "127.0.0.1"
    port => "6379"
    db => "0"
    key => "nginx_access"
    data_type => "list"
  }
  redis {
    host => "127.0.0.1"
    port => "6379"
    db => "0"
    key => "nginx_error"
    data_type => "list"
  }
}

filter {
  mutate {
    convert => ["upstream_time", "float"]
    convert => ["request_time", "float"]
  }
}

output {
   stdout {}
   if "access" in [tags] {
      elasticsearch {
        hosts => "http://localhost:9200"
        manage_template => false
        index => "nginx_access-%{+yyyy.MM}"
      }
    }
    if "error" in [tags] {
      elasticsearch {
        hosts => "http://localhost:9200"
        manage_template => false
        index => "nginx_error-%{+yyyy.MM}"
      }
    }
}

6.启动Logstash
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf

7.检查redis里是否被取走了
redis-cli
LLEN nginx_access 

8.es-head和kibana查看

第七章: 存入redis优化方案

1.优化filebeat,将所有的日志存入一个key中
filebeat.inputs:
- type: log
  enabled: true 
  paths:
    - /var/log/nginx/bbs.access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["access"]

- type: log
  enabled: true 
  paths:
    - /var/log/nginx/error.log
  tags: ["error"]

output.redis:
  hosts: ["127.0.0.1"]
  key: "all"

setup.template.name: "nginx"
setup.template.pattern: "nginx_*"
setup.template.enabled: false
setup.template.overwrite: true

2.logstash从一个key里读取,根据tag标签判断 
input {
  redis {
    host => "127.0.0.1"
    port => "6379"
    db => "0"
    key => "all"
    data_type => "list"
  }
}

filter {
  mutate {
    convert => ["upstream_time", "float"]
    convert => ["request_time", "float"]
  }
}

output {
   stdout {}
   if "access" in [tags] {
      elasticsearch {
        hosts => "http://localhost:9200"
        manage_template => false
        index => "nginx_access-%{+yyyy.MM}"
      }
    }
    if "error" in [tags] {
      elasticsearch {
        hosts => "http://localhost:9200"
        manage_template => false
        index => "nginx_error-%{+yyyy.MM}"
      }
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值