elk+ filebeat环境部署(docker 方式)

文章目录

      • 1. elk + filebeat 数据流
      • 2. 项目目录结构
      • 3. 前置配置
      • 4. 镜像下载
      • 5. 部署 nginx
      • 6. 部署 elk
      • 7. 部署 filebeat
        • 7.1 filebeat deb 方式部署
        • 7.2 filebeat docker 方式部署
        • 7.3 filebeat 卸载
      • 8. 涉及到文件详细内容
        • 8.1 filebeat - filebeat.yml
        • 8.2 02-beats-input.conf
        • 8.3 nginx - docker-compose.yaml
        • 8.4 nginx - nginx.conf
        • 8.5 nginx - index.html
      • 9. Issues
      • 10. kibana 操作图示
      • 附录 - 参考网址

1. elk + filebeat 数据流

filebeat(日志数据采集器) -> logstash:5044(搜集日志) -> es:9200(存储日志) -> kibana:5601(查询和可视化)
elk+ filebeat环境部署(docker 方式)_第1张图片
 

2. 项目目录结构

	elk/
	├── dockerFile					# 空文件夹
	├── filebeat
	│   └── filebeat.yml
	├── module						# 空文件夹
	└── nginx
	    ├── conf
	    │   ├── index
	    │   │   └── index.html
	    │   └── nginx.conf
	    ├── docker-compose.yaml
	    └── logs
	        ├── access.log 			# nginx 启动后会自动生成
	        └── error.log			# nginx 启动后会自动生成

 

3. 前置配置

	# 1. 调高JVM线程数限制数量, 防止启动容器时,报出如下错误:
	#  bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
	# 方式1: 运行 ELK 镜像需要 vm.max_map_count 至少需要 262144 内存(永久性修改)
	sudo vim /etc/sysctl.conf
		# 存在 vm.max_map_count 参数则修改,没有则新增
		vm.max_map_count = 262144
	
	# 方式2: 临时改变某个指定参数的值
	sysctl -w vm.max_map_count=262144
	
	# 重新加载内核参数
	sudo sysctl -p
	
	# 2. 添加本地IP的域名映射
	sudo vim /etc/hosts
		127.0.0.1 elk.answer.com

 

4. 镜像下载

	# ELK_VERSION=7.0.1 & ES_VERSION=7.0.1 & LOGSTASH_VERSION=7.0.1 & KIBANA_VERSION=7.0.1	
	# ES_PACKAGE=elasticsearch-7.0.1-linux-x86_64.tar.gz
	# LOGSTASH_PACKAGE=logstash-7.0.1.tar.gz
	# KIBANA_PACKAGE=kibana-7.0.1-linux-x86_64.tar.gz
	# 拉取 sebp/elk 镜像, 此次部署版本号为: 7.0.1
	docker pull sebp/elk
	
	# 拉取 nginx 镜像, 用于产生日志
	docker pull nginx

	# 拉取 filebeat 镜像, 如果是 deb 方式部署  filebeat 则不需要下载该镜像
	# docker 中 filebeat 版本: FILEBEAT_VERSION=6.2.3
  	docker pull prima/filebeat

	# 查看 镜像对应的 filebeat 版本
	docker image inspect prima/filebeat:latest | grep FILEBEAT_VERSION

 

5. 部署 nginx

	# 进入 nginx 目录
	cd elk/nginx
	
	# 启动 nginx 容器实例
	docker-compose -f docker-compose.yaml up -d
	
	# 验证 nginx 服务启动状态. 由于映射的是80端口, 因此无需写端口号
	curl http://IP

 

6. 部署 elk

	# 启动 elk 容器实例	
  	docker run -p 7050:9200 -p 7053:5044 -p 7051:5601 -v /data/elk/dockerFile:/data -it -d --name elk sebp/elk
  
  	# 查看 elk 容器日志
  	docker logs -f elk --tail=100
  
  	# 验证
  	# 访问 es
  	http://10.135.XXX.XXX:7050
  	http://10.135.XXX.XXX:7050/_search?pretty

  	# 访问 kibana
  	http://10.135.XXX.XXX:7051

 

7. 部署 filebeat

7.1 filebeat deb 方式部署

# 下载 filebeat-6.2.4-amd64.deb
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-amd64.deb

# 安装 filebeat
sudo dpkg -i ./filebeat-6.2.4-amd64.deb
sudo systemctl daemon-reload

# 验证, 查看 filebeat 版本
filebeat version

# 编辑 filebeat.yml 文件内容, 内容见下面
sudo vim /etc/filebeat/filebeat.yml

# 启动 filebeat  服务
sudo service filebeat start

# 查看 filebeat 日志
sudo tail -f /var/log/filebeat/filebeat

# 进入 elk 容器内部
docker exec -it elk bash

# 修改 02-beats-input.conf 文件, 去掉 ssl 配置
vim /etc/logstash/conf.d/02-beats-input.conf
	ssl => true
    ssl_certificate => "/etc/pki/tls/certs/logstash-beats.crt"
    ssl_key => "/etc/pki/tls/private/logstash-beats.key"

# 重启 elk 容器
docker restart elk

 

7.2 filebeat docker 方式部署

	# 注意将宿主机的日志文件挂载到容器内部, 以及 filebeat.yml 文件配置域名时需要在容器内部做域名映射(add-host)  
  	docker run -d --name filebeat \
    	-v /data/elk/filebeat/filebeat.yml:/filebeat.yml \
    	-v ~/elk/filebeat/logs/:/home/logs/ \
    	-v /data/elk/module:/module \
    	-v /data/elk/nginx/logs/:/data/elk/nginx/logs/ \
    	--add-host elk.answer.com:111.XXX.XXX.XXX\
    	prima/filebeat
    
    # 查看 filebeat 容器实例的日志
    docker logs -f filebeat

7.3 filebeat 卸载

	  #############################################
	  #     deb 方式卸载
	  #############################################
	  # 查看
	  dpkg -l filebeat
	  # 卸载
	  dpkg -r filebeat
	  sudo dpkg --purge  filebeat
	  # 重载配置文件
	  sudo systemctl daemon-reload
	  
	  #############################################
	  #     docker 方式卸载
	  #############################################
	  # 删除容器
	  docker rm -f filebeat
	  
	  # 删除镜像
	  docker rmi -f prima/filebeat:latest

 

8. 涉及到文件详细内容

8.1 filebeat - filebeat.yml

# sudo vim /etc/filebeat/filebeat.yml
filebeat:
  prospectors:
    -
      # 指定要监控的日志,可以指定具体得文件或者目录
      paths:
        - /data/elk/nginx/logs/access.log
      # 指定文件的输入类型log(默认)或者stdin
      input_type: log
      enabled: true
      # 设定Elasticsearch输出时的document的type字段 可以用来给日志进行分类。Default: log
#      document_type: nginx-access
      # 如果设置为0s,则Filebeat会尽可能快地感知更新(占用的CPU会变高)。默认是10s
      scan_frequency: 10s
  # 记录filebeat处理日志文件的位置的文件,默认是在启动的根目录下
  registry_file: /var/lib/filebeat/registry
output:
  logstash:
    # filebeat收集后放到 logstash 里
    hosts: ["elk.answer.com:7053"]
    enabled: true
    index: filebeat

注意: 此处需要在 /etc/hosts 文件中添加域名映射 127.0.0.1 elk.answer.com

 

8.2 02-beats-input.conf

input {
  beats {
    host => "0.0.0.0"
    port => 5044
  }
}

注意: 此处关闭 ssl, filebeat.yml 中也必须关掉 ssl, 这个文件在 elk 容器内部, 路径为: /etc/logstash/conf.d/

  1. docker exec -it elk bash
  2. vim /etc/logstash/conf.d/02-beats-input.conf

 

8.3 nginx - docker-compose.yaml

version: '2'

services:
  poc.sdk.nginx:
    container_name: aal_nginx
    hostname: aal_nginx
    image: nginx:latest
    environment:
      - HOSTNAME=aal_nginx
    working_dir: /var/log/nginx
    volumes:
      - ./logs:/var/log/nginx
      - ./conf/index/index.html:/usr/share/nginx/html/index.html:ro
      - ./conf/nginx.conf:/etc/nginx/nginx.conf
      - /etc/localtime:/etc/localtime:ro
    expose:
      - 80
    ports:
      - 80:80
    logging:
      driver: "json-file"
      options:
        max-size: "200M"
        max-file: "5"

 

8.4 nginx - nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  json '{"@timestamp":"$time_iso8601",
                        "@version":"1","host":"$server_addr",
                        "client":"$remote_addr", "size":"$body_bytes_sent",
                        "responsetime":"$request_time",
                        "domain":"$host","url":"$uri","status":"$status"}';

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

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

 

8.5 nginx - index.html


<html>
<head>
<title>Welcome to nginx!title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
style>
head>
<body>
<h5>Welcome to nginx, Answer.AL.L!h1>
body>
html>

 

9. Issues

	# Questions1 - 如果 filebeat 日志报错, 解决方案: 重启 elk
	ERR Failed to publish events caused by: lumberjack protocol error
	  
	# Questions1 - 解决方案
	# 进入 elk 容器内部
	docker exec -it elk bash
	  
	# 注释掉 ssl 配置
	vim /etc/logstash/conf.d/02-beats-input.conf
		# ssl => true
	    # ssl_certificate => "/etc/pki/tls/certs/logstash-beats.crt"
	    # ssl_key => "/etc/pki/tls/private/logstash-beats.key"
	    
	# 重启 elk 容器
	docker restart elk

 

10. kibana 操作图示

elk+ filebeat环境部署(docker 方式)_第2张图片

问题排查原因:

  1. filebeat.yml 中的域名是否已经完成映射(注意docker部署时需要在容器内部完成映射)
  2. filebeat.yml 中的日志源是否挂载到容器内部

 

创建索引模式
elk+ filebeat环境部署(docker 方式)_第3张图片elk+ filebeat环境部署(docker 方式)_第4张图片
 

查找日志信息
elk+ filebeat环境部署(docker 方式)_第5张图片
 

附录 - 参考网址

  • 项目中设计到的相关文件源文件
  • Docker ELK+Filebeat安装与配置
  • 6. Filebeat部署
  • Docker下ELK三部曲之一:极速体验
  • 使用Docker快速部署ELK分析Nginx日志实践
  • 基于docker部署使用ELK+FileBeat日志管理平台

你可能感兴趣的:(运维工具使用,教程类)