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了


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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM