ELK日志收集

作者: 酷酷的伟 | 来源:发表于2019-10-06 06:37 被阅读0次

1.找出访问排名前10的IP
2.找出访问排名前10的URL
3.找出10点到14点之间访问频次最高的IP和URL
4.找出10点到14点之间bbs网站访问最高的IP和URL
5.找出攻击者的IP,他都访问了什么页面?从什么时候来的,什么时候走的,一共访问多少次
6.找出昨天和今天同时间段访问有什么变化
7.查看各大搜索引擎今天访问了多少次,都访问了哪些页面
8.找出哪些是伪造的爬虫IP,并查封
9.5分钟内告诉我结果

资料链接

image
Elasticsearch java 存储,提供数据
Logstash java 收集日志,转发到ES,过滤转换字段
Kibana java 过滤,分析,搜索,展示
Filebeat GO 收集日志,转发给ES
image image

kibana安装

[root@elk01 /server/tools/EFLK软件包v6.6.0]# ls
ansible_elk.tar.gz
elasticsearch-6.6.0.rpm
filebeat-6.6.0-x86_64.rpm
kibana-6.6.0-x86_64.rpm
logstash-6.6.0.rpm

rpm -ivh kibana-6.6.0-x86_64.rpm

kibana配置

[root@lb01 /data/soft]# grep "^[a-z]" /etc/kibana/kibana.yml
server.port: 5601
server.host: "10.0.0.5"
elasticsearch.hosts: ["http://10.0.0.5:9200"]
kibana.index: ".kibana"

重启kibana
systemctl restart kibana.service

image.png
image image image image

filebeat

安装filebeat
rpm -ivh filebeat-6.6.0-x86_64.rpm 

查看配置文件路径
[root@elk01 ~]# rpm -qc filebeat 
/etc/filebeat/filebeat.yml

修改配置文件
[root@elk01 ~]# vim  /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
output.elasticsearch:
  hosts: ["10.0.0.5:9200"]

启动filebeat
[root@elk01 ~]# systemctl restart filebeat.service

查看日志
[root@elk01 ~]# tail -f /var/log/filebeat/filebeat 

安装nginx
[root@elk01 ~]# yum install -y nginx

启动nginx
[root@elk01 ~]# systemctl restart nginx.service 

在浏览器上刷一些访问日志
http://10.0.0.5/YouArePig

查看nginx的日志
[root@elk01 ~]# tail -f /var/log/nginx/access.log

filebeat工作原理
100条
停止filebeat
110条
启动filebeat


刷新elasticsearch-head插件

image

操作kibana

image image image image image image image

收集Nginx的json日志

第一步:修改nginx日志为json格式,重启nginx

> /var/log/nginx/access.log

log_format json '{ "time_local": "$time_local", '
                     '"remote_addr": "$remote_addr", '
                     '"referer": "$http_referer", '
                     '"request": "$request", '
                     '"status": $status, '
                     '"bytes": $body_bytes_sent, '
                     '"agent": "$http_user_agent", '
                     '"x_forwarded": "$http_x_forwarded_for", '
                     '"up_addr": "$upstream_addr",'
                     '"up_host": "$upstream_http_host",'
                     '"upstream_time": "$upstream_response_time",'
                     '"request_time": "$request_time"'
 ' }';

systemctl restart nginx

access_log  /var/log/nginx/access.log  json; 

第二步:修改filebeat配置文件

[root@lb01 ~]# cat /etc/filebeat/filebeat.yml 
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/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.elasticsearch:
  hosts: ["10.0.0.5:9200"]
  indices:
  - index: "nginx-access-%{[beat.version]}-%{+yyyy.MM}"
    when.contains:
      tags: "access"
  - index: "nginx-error-%{[beat.version]}-%{+yyyy.MM}"
    when.contains:
      tags: "error"

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

=================================

重启filebeat

systemctl restart filebeat

第三步: 访问nginx

ab -c 10 -n 100 http://10.0.0.5/oldzhang.html

第四步: kibana添加索引

ELK日志收集系统—收集Docker日志

1. 使用filebeat modules收集json的nginx日志文件

使用filebeat modules收集普通格式的nginx日志

第零步: 下载es插件
http://192.168.0.163/elk/ingest-geoip-6.6.0.zip    
http://192.168.0.163/elk/ingest-user-agent-6.6.0.zip

第一步: 修改nginx日志格式为普通格式
修改nginx.conf配置文件

第二步: 清空nginx日志
> /var/log/nginx/access.log 

第三步: 重启nginx并验证日志格式是否为普通格式了
nginx -t
systemctl restart nginx 
curl 127.0.0.1 
cat /var/log/nginx/access.log

第四步: 修改filebeat配置文件
[root@lb01 ~]# cat /etc/filebeat/filebeat.yml 
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true 

output.elasticsearch:
  hosts: ["10.0.0.5:9200"]
  indices:
  - index: "nginx-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

第五步: 激活模块并查看模块
filebeat modules enable nginx
filebeat modules list

第六步: 配置nginx模块
[root@lb01 ~]# cat /etc/filebeat/modules.d/nginx.yml 
- module: nginx
  access:
    enabled: true
    var.paths: ["/var/log/nginx/access.log"]

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

第七步: 安装es插件
#注意!第一个插件geoip会提示你输入Y

cd /usr/share/elasticsearch/bin/
./elasticsearch-plugin install file:///root/ingest-geoip-6.6.0.zip 
./elasticsearch-plugin install file:///root/ingest-user-agent-6.6.0.zip

第八步: 重启es
systemctl restart elasticsearch

第九步: 重启filebeat 
systemctl restart filebeat

第十步: 访问测试nginx
curl 127.0.0.1/lalalalal 

第十一步: es-head查看
查看是否生成了2个索引 
nginx-access-6.6.0-2019.08
nginx-error-6.6.0-2019.08

第十二步: kibana添加查看
添加2个索引,查看是否解析成json了

image image

2. docker的安装

Docker_ELK部署实践

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
systemctl start docker
cat >  /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
systemctl restart docker

docker名词

docker-ce : 软件名称
镜像 : nginx镜像
容器 : 运行一个微型的linux系统 
端口映射: 宿主机对应容器内的端口

常用命令:

启动docker 
systemctl start docker 

查看镜像:
docker images  

查看正在运行的容器:
docker ps 

查看所有的容器:
docker ps -a 

查看容器日志
docker logs -f xxxx

导出镜像
docker save nginx -o nginx.tar

导入镜像
docker load -i nginx.tar

运行容器:
docker run --name nginx -p 80:80 -d nginx

停止容器
docker stop nginx

拉取镜像
docker pull nginx

查看容器所有信息
docker inspect nginx

收集单个容器日志

目前的问题:
1.索引名称是默认的
2.access和error写在了一起

我们想要的结果:
1.索引名称自定义
2.access和error分开存储

目标:
1.添加标签tag或者判断条件

实现:
1.通过关键字段"stream"可以判断
"stream": "stdout"
"stream": "stderr"

filebeat配置文件:

收集多个容器日志

docker commit nginx nginx:v2
docker images
docker run --name nginx:v2 -p 8080:80 -d nginx:v2
docker ps -q

问题:
1.无法按服务区分出来容器的日志
2.所有容器的日志都打在了一起

按容器的服务类型去创建不同的索引

理想中的索引:
mysql : 
docker-db-access-6.6.0-2019.08
docker-db-error-6.6.0-2019.08

nginx :
docker-nginx-access-6.6.0-2019.08
docker-nginx-error-6.6.0-2019.08

解决方案:
使用docker-compose把标签打进容器的日志里

第一步: 安装docker-compose命令
1.安装docker-compose
yum install -y python2-pip

2.这里使用pip安装,默认源为国外,可以使用国内加速,相关网站
https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
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

3.继续安装docker-compose
pip install docker-compose

4.检查
docker-compose version

第二步: 编写docker-compose文件
root@lb02 ~]# cat docker-compose.yml 
version: '3'
services:
  nginx:
    image: nginx:v2
    # 设置labels
    labels:
      service: nginx
    # logging设置增加labels.service
    logging:
      options:
        labels: "service"
    ports:
      - "8080:80"
  db:
    image: nginx:latest
    # 设置labels
    labels:
      service: db 
    # logging设置增加labels.service
    logging:
      options:
        labels: "service"
    ports:
      - "80:80"

第三步: 删除以前的容器
docker stop $(docker ps -q)
docker rm $(docker ps -aq)    

第四步: 运行docker-compose命令
启动命令
docker-compose up  -d 
停止命令
docker-compose stop 

第五步: 配置filebeat
[root@lb02 ~]# cat /etc/filebeat/filebeat.yml 
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.5: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

第六步: 重启filebeat
systemctl restart filebeat

第七步: 检查索引是否生成

相关文章

  • 日志收集项目

    日志收集项目架构设计及Kafka 目前主流的日志收集方案ELK ELK问题:增加一个日志收集项,需要手动修改配置。...

  • elk怎么收集windows IIS日志

    elk 怎么收集windows系统日志、IIS日志,求解

  • day20(ELK第一天)

    1、elasticsearch回顾 ELK功能图 ELK架构图 1、ELK日志收集 2、常规分析日志的操作 2.1...

  • The Road of DBA 20_NoSQL_ELK---(

    1、elasticsearch回顾 ELK功能图 ELK架构图 1、ELK日志收集 2、常规分析日志的操作 2.1...

  • 分布式日志收集ELK

    SpringBoot集成ELK实现分布式日志收集 作者:Bob Zhang01前两天项目中想用ELK收集日志,用了...

  • 十五 Kubernetes容器日志收集

    (一) Kubernetes日志收集 1. Kubernetes需要收集哪些日志? 2.收集日志常用的技术栈ELK...

  • Linux学习elk日志收集工具

    elk日志收集工具 1、 日志在工作当中的重要性 2、使用数据库在搜索查询 3、日志收集工具有那几种 4、elk的...

  • 使用elk收集应用日志

    使用elk收集应用日志 使用redis作为broker,logstash作为indexer,收集日志进入es。 相...

  • ELK安装部署并监控nginx

    ELK日志收集部署 ELK介绍 ELK是3个开源产品的组合: Elasticsearch Logstash Kib...

  • ELK环境部署

    一、ELK原理介绍 ELK可以将我们的系统日志、网站日志、应用系统日志等各种日志进行收集、过滤、清洗、然后进行集中...

网友评论

    本文标题:ELK日志收集

    本文链接:https://www.haomeiwen.com/subject/nljoectx.html