• ELK日志企业案例:(5.3版本)


    1、shell三剑客同居、分析nginx日志:
    1)在企业生产环境中,日志内容主要用来做什么? 日志内容主要用于运维人员、开发人员、DBA排错软件服务故障的,因为通过日志内容能够第一时间找到软件服务的异常或者故障原因,从而第一时间解决问题,降低企业的损失。
     
    2)日志内容在企业中,除了用于排错、定位问题之外。运维u人员、开发人员还可以对日志内容进行分析、统计、过滤,评估网站访问量、PV(Page Veiw)、UV(uniq visitor)、IP(独立IP)、用于访问行为等。
     
    3)基于SHELL编程三剑客awk、sed、grep来分析、统计线上nginx日志、统计nginx访问日志全天总的请求数:
    wc -l access_20200228.log|cut -d" " -f1
    awk '{print $0}' access_20200228.log|wc -l
    awk '{print NR}' access_20200228.log|tail -1
    sed = access_20200228.log|tail -2|head -1
    grep -aic "" access_20200228.log

    4)基于SHELL编程三剑客awk、sed、grep来分析、统计线上nginx日志,统计nginx访问日志全天(09:00-11:00)总的请求数:

    grep "2020:09:00" access_20200228.log|wc -l|more
    grep "2020:11:00" access_20200228.log|wc -l
    sed -n '/2020:09:00/'p access_20200228.log
    awk "/2020:09:00/,/2020:11:00/" access_20200228.log|wc -l
    sed -n '/2020:09:00/,/2020:11:00/'p access_20200228.log|wc -l

    5)基于SHELL编程三剑客awk、sed、grep来分析、统计线上nginx日志,统计nginx访问日志全天(09:00-11:00)总的请求数,将访问的用户IP打印出来, 将访问量排前20名IP打印:
    将访问用户IP打印出来:

    sed -n '/2020:09:00/,/2020:11:00/'p access_20200228.log|cut -d" " -f1
    sed -n '/2020:09:00/,/2020:11:00/'p access_20200228.log|awk '{print $1}'
    sed -n '/2020:09:00/,/2020:11:00/'p access_20200228.log|grep -oE "([0-9]{1,3}.){3}[0-9]{1,3}"

    将访问量排前20名的IP打印出来:

    sed -n '/2020:09:00/,/2020:11:00/'p access_20200228.log|grep -oE "([0-9]{1,3}.){3}[0-9]{1,3}"|sort -n|uniq -c
    sed -n '/2020:09:00/,/2020:11:00/'p access_20200228.log|grep -oE "([0-9]{1,3}.){3}[0-9]{1,3}"|sort -n|uniq -c|sort -nr|head -20
    2、ELK日志企业概念:
    1)根据如上的三剑客awk、sed、grep统计、分析线上nginx日志,发现执行效率和结果很低,速度很慢,尤其是日志量非常庞大的时候,效率极低,在企业中要求实时统计、分析,awk、sed、grep显然不可取的。
    2)在企业生产环境中,常见的日志种类:
     
    系统日志;
     
    内核日志;
     
    审计日志;
     
    安全日志;
     
    应用日志;
    3)ELK不是一款软件组成,是由三款软件组成的,分别是:ElasticSearch、Logstash、Kibana,其中ES、Logstash均是基于Java语言开发的,所以底层需要依赖JAVA JDK工具包。
     
    ElasticSearch
    ElasticSearch是基于JAVA语言开发的开源的、分布式、搜索存储引擎,主要是用于持久化存储日志内容(硬盘上)、同时具备实时的检索、分析、统计功能。类似百度搜索引擎的功能。
     
    Logstash
    Logstash是基于JAVA语言开发的开源的、免费的日志收集工具,主要是用于收集客户端的日志内容(系统、内核、安全、应用日志),同时可以过滤日志内容,最终将日志内容持久化存储到ElsticSearch服务器。 每个客户端主机均需要安装Logstash日志收集插件。
     
    Kibana
    Kibana是基于Nodejs语言开发的WEB程序(UI界面:web前端框架),主要是为ElasticSearch、Logstash提供WEB界面操作,方便运维人员、开发人员更加直观的对ELK平台配置、日志分析、日志统计等。
     
    4)ELK分布式日志平台工作原理:
    客户端安装Logstash日志收集工具,通过Logstash收集客户端应用程序的日志内容,将所有的日志过滤出来,并且存入ElasticSearch搜索引擎里,然后通过Kibana UI在WEB前端展示给用户,用户需要可以进行查询指定的ES引擎中日志内容。

    3、ELasticsearch配置实战(5.3版本):
    部署配置ES,需要配置JDK 环境,JDK(Java Development Kit)是Java 语言的软件开发工具包(SDK):
    分别下载ELK软件包:

    wget   https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz
    wget   https://artifacts.elastic.co/downloads/logstash/logstash-5.3.0.tar.gz
    wget   https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-linux-x86_64.tar.gz

    1)ELK安装环境信息:(其中Elasticcsearch与Kibana可以安装在一台机器上 )

    192.168.1.11  Elasticsearch
    192.168.1.13  Kibana
    192.168.1.14  Logstash

    2)192.168.1.12 安装ES(虚拟机最好给2G):
    安装JDK:

    mkdir -p /usr/java
    tar xf jdk1.8.0_131.tar.gz -C /usr/java
    配置环境变量:vim /etc/profile
    export JAVA_HOME=/usr/java/jdk1.8.0_131
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
    使环境变量立刻生效,同时查看JAVA版本,显示版本信息,则证明安装成功:
    source /etc/prefile
    java -version
    下载ES并配置:
    tar xf elasticsearch-5.3.0.tar.gz
    mv elasticsearch-5.3.0 /usr/local/elasticsearch

    修改 /usr/local/elasticsearch/config/jvm.options文件
    -xms最小使用内存,-xmx最大使用内存: 两个需要设置为一样,或者启动报错

    -xms最小使用内存,-xmx最大使用内存: 两个需要设置为一样,或者启动报错
    -xms 1g
    -xmx 1g
    修改 /usr/local/elasticsearch/config/elasticsearch.yml文件:
    设置监听地址为network.host:0.0.0.0全网地址:

     创建elk普通用户,用来启动ES 服务: ES服务为了安全默认不允许root启动ES:

    useradd elk
    chmod -R elk. /usr/local/elasticsearch/
    su - elk
    启动ES服务
    /usr/local/elasticserch/bin/elasticsearch -d

    4、ELasticsearch配置故障演练:
    查看日志:

    tailf /usr/local/elasticsearch/logs/elasticsearch.log
    启动后可能会报错,需要修改如下内核参数设置:
    1)SecComp功能不支持: 以下为报错信息
    ERROR: bootstrap checks failed
    system call filters failed to install; check the logs and fix your 
    configuration or disable system call filters at your own risk;

    因为Centos6不支持SecComp,而ES5.3.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
    Seccpmp(全称securecomputing mode)是Linux Kernel从2.6.23版本开始所支持的一种安全机制。
    在Linux系统里,大量的系统调用(systemcall)直接暴露给勇敢态程序。但是并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。通过Seccomp,我们限制程序使用某些系统调用,这样可以减少系统的暴露免,同时使程序进入一种“安全”的状态。
    
    解决方法:

    在elasticsearch.yml文件中配置bootstrap.system_call_filter为false,注意要在Memory下面
    bootstrap.memory_lock: false
    bootstrap.system_call_filter: false

    2)内核参数设置问题:
    max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

    解决方法: /etc/security/limits.conf文件中最后添加:
    * soft nofile 65536 * hard nofile 65536

    max mumder of threads [1024] for user [hadoop] is too low,increase to at least [2048]

    解决方法: /etc/security/limits.d/20-nproc.conf
    soft  nproc  2048
    max virtual memory areas vm.max_map_count[65530]is too low, increase to at least [262144]
    解决方法: /etc/sysctl.conf 修改完 sysctl -p生效
    vm.max_map_count=262144

     

     initial heap size [536870912] not equal to maximum heap size [1073741824];this can canuse resize pauses and prev ts mlockall from locking the entire heap

    解决方法: /usr/local/elasticsearch/config/jvm.options
    -xms 1g
    -xmx 1g
    Max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量。虚拟内存区域是一个连续的虚拟地址空间区域。再进程的生命周期中,没当程序尝试再内存中映射文件,链接到共享内存端,或者分配堆空间的时候,这些区域将被创建。
    调优这个值将限制进程可拥有VMA的数量。限制一个进程拥有VMA的总数可能导致应用程序出错,因为当进程达到VMA上线但又只能释放少量的内存给其它的内核进程使用时,操作系统会抛出内存不足的错误。
    如果你的操作系统再NORMAL区域仅占用少量的内存,那么调低这个值可以帮助释放内存给内核用。
    sysctl -p 或者退出终端:

     

    至此ES配置完毕,如果像配置ES集群模式,同样也非常简单,只需要拷贝ES副本即可,然后修改相对应的参数。

    4、Kibana WEB安装配置:
    部署安装Kibana 不需要安装JAVA JDK环境,直接下载源码,解压即可:

    tar xzf kibana-5.3.0-linux-x86_64.tar.gz
    mv kibana-5.3.0-linux-x86_64 /usr/local/kibana/
    修改Kibana配置文件信息,设置ES地址:
    vim /usr/local/kibana/config/kibana.yml

     启动Kibana服务:

    后台启动:
    cd /usr/local/kibana/bin/
    nohup ./kibana &
    查看监听:
    netstat -nutlp|grep -E "5601"

    web浏览访问kibanaIP地址:5601端口:

    5、Logstash客户端配置实战:

    由于Logstash基于JAVA语言开发,Agent部署需要安装JDK运行环境库:
    mkdir -p /usr/java/ tar xf jdk-1.8.0_131 -C /usr/java/ vim /etc/profile添加如下代码: export JAVA_HOME=/usr/java/jdk1.8.0_131 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin 解压Logstash软件: tar xf logstash-5.3.0.tar.gz mv logstash-5.3.0 /usr/local/logstash
    6、ELK收集系统标准日志:
    #创建收集日志配置目录:
    mkdir -p /usr/local/logstash/config/etc 
    cd /usr/local/logstash/config/etc

     创建ELK整合配置文件: vim elk.conf内容如下:

    input {
     stdin { }
    }
    output {
     stdout {
     codec => rubydebug {}
    }
     elasticsearch {
     hosts => "192.168.1.11:9200" }
    }

     启动logstash服务:

    /usr/local/logstash/bin/logstash  -f  elk.conf
    后台启动:
    nohup /usr/local/logstash/bin/logstash -f elk.conf &
    ps -ef|grep java

    7、ELK-WEB日志数据图表:
    Logstah启动窗口中输入任意信息,会自动输出相应格式日志信息:
    浏览器输入:http://KibanaIP地址:5601/
    为了使用Kibana 你必须配置至少一个索引模式,索引模式是用于确认Elasticsearch index,用来运行搜索和分析,也可以用于配置字段。
    index contains time-based events 索引基于时间的事件;
    Use event times to create index names [DEPRECATED] 使用事件时间来创建索引名称【过时】
    index name or pattern 索引名字或者模式;
    模式允许你定义动态的索引名字 使用*作为通配符,例如默认:
    logstash-*
    选择:
     
    Time field name;
     
    单击Discover,可以搜索和浏览 Elasticsearch 中的数据,默认搜索的是最近15分钟的数据。 可以自定义选择时间。
     
     

     

  • 相关阅读:
    华为花了100亿,为员工造了12个欧洲小镇,幸福到爆棚
    Qt5.9 官方发布的新版本亮点的确不胜枚举(而且修复2000+ bugs)
    详尽分析世纪之战:360VS腾讯是两个阶层的抗争
    c#
    PhantomJS
    bootstrap table
    Linux 入门
    多路搜索树
    网站性能优化工具
    NetCore上传多文件
  • 原文地址:https://www.cnblogs.com/fengyuanfei/p/13815829.html
Copyright © 2020-2023  润新知