day22(ELK第三天)

1、回顾昨天(索引优化)


1. 按照我们想要的效果生成索引
- 自定索引名称
- 按月生成
- 按域名和访问类型创建索引
- 能够索引日志里的 每个字内容

2. filebeat设置
- nginx格式修改为json
- filebeate添加模板相关选项
       setup.template.name: "nginx"
       setup.template.pattern: "nginx_*"
       setup.template.enabled: false
       setup.template.overwrite: true
- filebeat添加参数直接解析成json格式
      json.keys_under_root: true
      json.overwrite_keys: true
- filebeat的input添加tags标签
      tags["www"]
- filwbeat的output里判断tags
    - index: "nginx_www_access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        tags: "www"


3. 收集tomcat日志
- 安装tomcat并访问,产生数据
- 修改tomcat日志为json格式,139行替换
- 验证tomcat日志是否为json格式
- filebeat配置
-- 使用*来匹配tomcat每天生成的日志
    - type: log


4. 收集java多行日志
- filebeat配置java日志路径
- 添加3行多行匹配的参数
  - type: log
    enabled: true 
    paths:
      - /var/log/elasticsearch/linux58.log
    tags: ["java"]
    multiline.pattern: '^\['
    multiline.negate: true
    multiline.match: after


5.kibana画图展示
- 柱状图,饼图,仪表图,折线图,Data Table,markdown
- Dashboard大屏实时展示
- 查询时间要注意,查询条件对面板也是生效的
- 画完记得保存
- 别把es里的.kibana给删了



2、ELk filebeat modules


filebeat是go语言编写
- 快,不依赖于java环境

配置步骤:
1.配置相关modules参数
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true
  reload.period: 10s

2.查看模块
filebeat modules list

3.激活模块
[root@db01 ~]# filebeat modules enable nginx
Enabled nginx

4.修改nginx为普通日志格式

5.修改filebeat配置文件


不足的地方:
1.错误日志和正确日志都混在一起了
2.不能按域名生成索引


2.1、filebeat modules 自定义索引和视图


1.为了不影响实验,建议删除所有其他的索引
systemctl stop elasticsearch
systemctl stop kibana
rm -rf /data/elasticsearch/*
rm -rf /var/lib/kibana/*
systemctl start elasticsearch
systemctl start kibana

2.修改nginx配置文件
sed -i 's#json#main#g' /etc/nginx/conf.d/bbs.conf

3.清空nginx日志
> /var/log/nginx/bbs_access.log

4.重启nginx
systemctl restart nginx

5.修改filebeat配置文件:
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true
setup.kibana:
  host: "10.0.0.51:5601"
output.elasticsearch:
  hosts: ["10.0.0.51:9200"]
  indices:
    - index: "nginx_bbs_access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        source: "/var/log/nginx/bbs_access.log"
    - 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模块报错
filebeat modules enable nginx

7.安装nginx modules插件
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/ingest-geoip-6.6.0.zip /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/ingest-user-agent-6.6.0.zip 

8.重启es
systemctl restart elasticsearch

9.修改模块配置
[root@db01 ~]# egrep -v "#|^$" /etc/filebeat/modules.d/nginx.yml 
- module: nginx
  access:
    enabled: true
    var.paths: ["/var/log/nginx/bbs_access.log"]
  error:
    enabled: true
    var.paths: ["/var/log/nginx/error.log"]


10.备份删除不必要的视图文件并导入到kibana
cp -a /usr/share/filebeat/kibana /root
cd /usr/share/filebeat/kibana/6/dashboard
find . -type f ! -name "*nginx*"|xargs rm -rf
rm -rf  ml-nginx-*
sed -i 's#filebeat\-\*#nginx\_\*#g' Filebeat-nginx-logs.json 
sed -i 's#filebeat\-\*#nginx\_\*#g' Filebeat-nginx-overview.json
cd index-pattern/
sed -i 's#filebeat\-\*#nginx\_\*#g' filebeat.json
filebeat setup --dashboards -E setup.dashboards.directory=/root/kibana/
rm -rf /var/lib/kibana/*
systemctl restart kibana

3、安装docker步骤


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

下载镜像
docker pull nginx
docker run --name nginx -p 80:80 -d nginx
docker ps
docker logs -f nginx



镜像:模板
容器:以什么模板启动的微型linux


docker pull 镜像名:版本:拉去镜像
docker rmi  镜像名或id:删除镜像
docker images:获取本地已有镜像
docker run  镜像名或id:使用默认端口启动镜像
docker run -p port:port1 -d 镜像名或id:指定port端口映射到port1,并后台启动镜像


进入容器内部 docker exec -it nginx容器ID /bin/bash
docker ps:查看正在运行的docker容器
docker ps -a:查看所有执行过run命令的容器服务(包括已经停止的容器)
docker stop 容器id:停止某个容器
docker restart 容器id:重启某个容器
docker rm 容器Id:删除某个容器

docker exec -it nginx /bin/bash

3.1、收集docker容器日志


1.生成多个容器
systemctl stop nginx 
docker stop $(docker ps -q)
docker rm $(docker ps -aq)
docker commit nginx nginx:v2
docker run --name nginx -p 80:80 -d nginx
docker run --name mysql -p 8080:80 -d nginx:v2
docker images
docker ps 
docker logs -f nginx
docker logs -f mysql


2.修改filebeat配置文件
filebeat.inputs:
- type: docker
  containers.ids: 
    - '*'
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false 
setup.kibana:
  host: "10.0.0.51:5601"
output.elasticsearch:
  hosts: ["10.0.0.51:9200"]
  index: "docker-nginx-%{[beat.version]}-%{+yyyy.MM}"
setup.template.name: "docker"
setup.template.pattern: "docker-*"
setup.template.enabled: false
setup.template.overwrite: true

3.重启filebeat
systemctl restart filebeat


3.2、按服务类型拆分docker容器日志


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

5.创建docker-compose配置文件
[root@db03 ~]# cat docker-compose.yml 
version: '3'
services:
  nginx:
    image: nginx:latest
    #设置labels
    labels:
      service: nginx
    #logging设置增加labels.service
    logging:
      options:
        labels: "service"
    ports:
      - "80:80"
  mysql:
    image: nginx:v2
    #设置labels
    labels:
      service: mysql
    #logging设置增加labels.service
    logging:
      options:
        labels: "service"
    ports:
      - "8080:80"


6.使用docker-compose启动docker
docker stop $(docker ps -q)
docker rm $(docker ps -aq)
docker-compose up -d
docker ps 

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

setup.kibana:
  host: "10.0.0.51:5601"

output.elasticsearch:
  hosts: ["10.0.0.51: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-mysql-access-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        attrs.service: "mysql"
        stream: "stdout"
    - index: "docker-mysql-error-%{[beat.version]}-%{+yyyy.MM}"
      when.contains:
        attrs.service: "mysql"
        stream: "stderr"

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

4、filebeat和logstash配置


filebeat存入redis,logstash从redis读取数据

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

- type: log
  enabled: true 
  paths:
    - /var/log/nginx/www_access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["www"]

setup.kibana:
  host: "10.0.0.51:5601"

output.redis:
  hosts: ["localhost"]
  keys:
    - key: "bbs"
      when.contains:
        tags: "bbs"
    - key: "www"
      when.contains:
        tags: "www"
  db: 0
  timeout: 5

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

#redis查看命令
redis-cli 
keys *
llen bbs
llen www


#logstash配置
[root@db01 /data/soft]# cat /etc/logstash/conf.d/redis.conf 
input {
  redis {
    host => "127.0.0.1"
    port => "6379"
    db => "0"
    key => "bbs"
    data_type => "list"
  }

  redis {
    host => "127.0.0.1"
    port => "6379"
    db => "0"
    key => "www"
    data_type => "list"
  }
}



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

output {
    if "bbs" in [tags] {
      stdout {} 
      elasticsearch {
        hosts => "http://10.0.0.51:9200"
        manage_template => false
        index => "nginx-bbs-%{+yyyy.MM}"
      }
    }
   
    if "www" in [tags] {
      stdout {} 
      elasticsearch {
        hosts => "http://10.0.0.51:9200"
        manage_template => false
        index => "nginx-www-%{+yyyy.MM}"
      }
    }
}

#logstash启动命令
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf

4.1、redis和logstash配置优化


#####filebeat#######
filebeat.inputs:
- type: log
  enabled: true 
  paths:
    - /var/log/nginx/bbs_access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["bbs"]

- type: log
  enabled: true 
  paths:
    - /var/log/nginx/www_access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["www"]

setup.kibana:
  host: "10.0.0.51:5601"

output.redis:
  hosts: ["localhost"]
  key: "all_keys"
  db: 0
  timeout: 5

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

#######logstash########
input {
  redis {
    host => "127.0.0.1"
    port => "6379"
    db => "0"
    key => "all_keys"
    data_type => "list"
  }

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

output {
    if "bbs" in [tags] {
      stdout {} 
      elasticsearch {
        hosts => "http://10.0.0.51:9200"
        manage_template => false
        index => "nginx-bbs-%{+yyyy.MM}"
      }
    }
   
    if "www" in [tags] {
      stdout {} 
      elasticsearch {
        hosts => "http://10.0.0.51:9200"
        manage_template => false
        index => "nginx-www-%{+yyyy.MM}"
      }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容