zoukankan      html  css  js  c++  java
  • 企业级日志分析平台(八):ELKStack之极速入门(上)

    image_1d4d64taf144h8fh18qkbrd18hi9.png-219.7kB

     

    一,EKL介绍

     

    1.1 需求背景

    一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

    一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

    一个完整的集中式日志系统,需要包含以下几个主要特点: 
    收集-能够采集多种来源的日志数据 
    传输-能够稳定的把日志数据传输到中央系统 
    存储-如何存储日志数据 
    分析-可以支持 UI 分析 
    警告-能够提供错误报告,监控机制

    ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

     

    1.2 ELKStack介绍

    image_1crs4cuu3179m1md01d3d1lp2d5d9.png-53.4kB

    Logstash : 开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据存储到数据库中。

    Elasticsearch:搜索,分析和存储数据,分布式数据库。

    Kibana:数据可视化。

    Beats:轻量型采集器的平台,从边缘机器向Logstash和Elasticsearch发送数据。

    Filebeat:轻量型日志采集器。

    https://www.elastic.co/cn/

    https://www.elastic.co/subscriptions

     

    1.3 ELK Stack架构

    image_1crs4d9pb10dp10e815sv2jknsem.png-96.2kB

    Input:输入,输出数据可以是Stdin,File,TCP,Redis,Syslog等

    Filter:过滤,将日志格式化。有丰富的过滤插件:Grok正则捕获,Date时间处理,Json编码解码,Mutate数据修改等

    Output:输出,输出目标可以是Stdout,File,TCP,Redis,ES等

     

    二,环境部署

    主机名IP备注
    elkstack 192.168.200.70 内存3G
     

    ELK所有包

    链接:https://pan.baidu.com/s/1PTUOKy5MNXYIhSUkkbb-DA 
    提取码:fa6n

     

    2.1 环境要求

    cat /etc/redhat-release

    uname -r

    systemctl stop firewalld

    systemctl disable firewalld

    setenforce 0

    image_1d0932aql180l12g0u09ti3gufo.png-14.9kB

     

    2.2 安装jdk环境

    ls

    tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/

    mv /usr/local/jdk1.8.0_60 /usr/local/jdk

    image_1d0952q9ojtd1n20vuo10ems901l.png-19.3kB

     

    2.3 配置java环境变量

    vim /etc/profile

    tail -3 /etc/profile

     
    1. export JAVA_HOME=/usr/local/jdk/
    2. export PATH=$PATH:$JAVA_HOME/bin
    3. export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

    source /etc/profile

    java -version

    image_1d0954oih13v4bb21eh01hhr1i7r22.png-39.4kB

     

    三,kibana的安装和启动

     

    3.1 kibana下载地址

    kibana主要用来展现数据,它本身不存储数据

    https://artifacts.elastic.co/downloads/kibana/kibana-6.2.3-linux-x86_64.tar.gz

     

    3.2 编译部署kibana

    useradd -s /sbin/nologin -M elk

    ls

    tar xf kibana-6.2.3-linux-x86_64.tar.gz -C /usr/local/

    mv /usr/local/kibana-6.2.3-linux-x86_64 /usr/local/kibana

    image_1d09596bm17taqeef6ufnebo22v.png-30.8kB

     

    3.3 kibana配置文件修改

     

    修改以下配置文件

    cat -n /usr/local/kibana/config/kibana.yml | sed -n '2p;7p;21p;39p;40p'

     
    1. 2 #server.port: 5601
    2. 7 #server.host: "localhost"
    3. 21 #elasticsearch.url: "http://localhost:9200"
    4. 39 #elasticsearch.username: "user"
    5. 40 #elasticsearch.password: "pass"

    image_1d0959mnr4r9bsdfd1bnaqs13c.png-24.5kB

     

    修改成如下配置文件

    vim /usr/local/kibana/config/kibana.yml

    cat -n /usr/local/kibana/config/kibana.yml | sed -n '2p;7p;21p;39p;40p'

     
    1. 2 server.port: 5601 #暂时就先修改这两行
    2. 7 server.host: "0.0.0.0" #暂时就先修改这两行
    3. 21 #elasticsearch.url: "http://localhost:9200"
    4. 39 #elasticsearch.username: "user"
    5. 40 #elasticsearch.password: "pass"

    image_1d095bo623g61i58sjpv9i15np4p.png-27.7kB

     

    3.4 把kibana目录改为elk用户

    chown -R elk:elk /usr/local/kibana/

    image_1d095cjld12mn16s31ijr50gdkl56.png-16.2kB

     

    3.5 新增启动脚本vim /usr/local/kibana/bin/start.sh

    vim /usr/local/kibana/bin/start.sh

    cat /usr/local/kibana/bin/start.sh

     
    1. nohup /usr/local/kibana/bin/kibana >> /tmp/kibana.log 2>> /tmp/kibana.log &

    chmod a+x /usr/local/kibana/bin/start.sh

    image_1d095elp81akp1710iotnra41m66.png-28.4kB

     

    3.6 用普通用户启动kibana

    su -s /bin/bash elk '/usr/local/kibana/bin/start.sh'

    ps -ef | grep elk | grep -v grep

    如果有防火墙需要开放tcp5601端口

    image_1d095fh1s74118m3140fb9pb0v6j.png-19.7kB

     

    3.7 查看错误日志

    cat /tmp/kibana.log | grep warning | head -5

    这里有个警告,意思是连接不上elasticsearch,忽略,因为我们还没有装它。

     
    1. {"type":"log","@timestamp":"2019-01-03T14:12:30Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"Unable to revive connection: http://localhost:9200/"}
    2. {"type":"log","@timestamp":"2019-01-03T14:12:30Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"No living connections"}
    3. {"type":"log","@timestamp":"2019-01-03T14:12:32Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"Unable to revive connection: http://localhost:9200/"}
    4. {"type":"log","@timestamp":"2019-01-03T14:12:32Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"No living connections"}
    5. {"type":"log","@timestamp":"2019-01-03T14:12:35Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"Unable to revive connection: http://localhost:9200/"}

    image_1d095gdm61lc7d531c9mfgt1jpm70.png-52.2kB

     

    3.7 访问kibana

    http://192.168.200.70:5601

    image_1d095hu9m19hj10flnv9qj163s7d.png-146.6kB

     

    四,使用nginx来限制访问kibana

     

    4.1 使用nginx转发kibana

    由于kibana没有权限控制,可以借助nginx来部署认证和进行ip控制

     

    修改kibana的配置文件,改为监听127.0.0.1

    vim /usr/local/kibana/config/kibana.yml

    sed -n '7p' /usr/local/kibana/config/kibana.yml

    image_1d095jmlpnkdpes1kb1rdv1aib7q.png-15.1kB

     

    杀掉kibana,重启动kibana

    ps -ef | grep elk

    kill -9 1451

    ps -ef | grep elk

    su -s /bin/bash elk '/usr/local/kibana/bin/start.sh'

    ps -ef | grep elk | grep -v grep

    image_1d095l4j93p21jk214jj161qr9l87.png-45.8kB

     

    4.2 借助nginx来限制访问,控制源IP的访问

     

    编译安装nginx

    yum -y install pcre-devel openssl-devel

    tar xf nginx-1.10.2.tar.gz -C /usr/src/

    cd /usr/src/nginx-1.10.2/

    useradd -s /sbin/nologin -M nginx

    ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

    make && make install

    ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

    nginx -V

    image_1d095pjni168rmdlcv5ok1m6u97.png-140.2kB


    image_1d095stk7d0in57120lk4313tqbn.png-59.9kB


    image_1d095urfe9ledm4ams18cpkc8c4.png-129.1kB

     

    编辑nginx配置文件,进行访问控制,并启动nginx

    cd /usr/local/nginx/

    cp conf/nginx.conf{,.bak}

    egrep -v "#|^$" conf/nginx.conf.bak > conf/nginx.conf

    vim conf/nginx.conf

    cat conf/nginx.conf

     
    1. worker_processes 1;
    2. events {
    3. worker_connections 1024;
    4. }
    5. http {
    6. include mime.types;
    7. default_type application/octet-stream;
    8. log_format main '$remote_addr - $remote_user [$time_local] "$request"'
    9. '$status $body_bytes_sent "$http_referer"'
    10. '"$http_user_agent""$http_x_forwarded_for"';
    11. sendfile on;
    12. keepalive_timeout 65;
    13. server {
    14. listen 5609;
    15. access_log /usr/local/nginx/logs/kibana_access.log main;
    16. error_log /usr/local/nginx/logs/kibana_error.log error;
    17. location / {
    18. allow 192.168.200.1;
    19. deny all;
    20. proxy_pass http://127.0.0.1:5601;
    21. }
    22. }
    23. }

    nginx -t

    nginx

    netstat -antup | grep nginx

    image_1d096525me18f3c13er1plo1o43eh.png-91.8kB

     

    4.3 访问nginx监听端口5609

    http://192.168.200.70:5609

    image_1d0968cj41g9s1s3i1u4igqg463fe.png-153.1kB

     

    4.4 如果访问IP经常改变,授权就会很麻烦。可以利用nginx的访问验证功能来认证访问

     
    1. location / {
    2. auth_basic "elk auth";
    3. auth_basic_user_file /usr/local/nginx/conf/htpasswd;
    4. proxy_pass http://127.0.0.1:5601;
    5. }
     

    五,elasticsearch的安装和启动

    elasticsearch未安装之前,kibana网页上报错,提示找不到elasticsearch。

     

    5.1 elasticsearch的下载地址

    elastic search主要用来存储数据,供kibana调取并进行展现

    https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz

     

    5.2 解压部署elasticsearch

    ls

    tar xf elasticsearch-6.2.3.tar.gz -C /usr/local/

    mv /usr/local/elasticsearch-6.2.3 /usr/local/elasticsearch

    image_1d09ccos0lg61qrf1oe910cg143bh8.png-23.6kB

     

    5.3 elasticsearch配置

     

    修改以下配置文件中的代码

    cp /usr/local/elasticsearch/config/elasticsearch.yml{,.bak}

    cat -n /usr/local/elasticsearch/config/elasticsearch.yml | sed -n '33p;37p;55p;59p'

     
    1. 33 #path.data: /path/to/data
    2. 37 #path.logs: /path/to/logs
    3. 55 #network.host: 192.168.0.1
    4. 59 #http.port: 9200

    image_1d09ce0081ejld4m1jtv1knnqa9hl.png-26.5kB

     

    修改成如下配置文件中的代码

    vim /usr/local/elasticsearch/config/elasticsearch.yml

    cat -n /usr/local/elasticsearch/config/elasticsearch.yml | sed -n '33p;37p;55p;59p'

     
    1. 33 path.data: /usr/local/elasticsearch/data
    2. 37 path.logs: /usr/local/elasticsearch/logs
    3. 55 network.host: 127.0.0.1
    4. 59 http.port: 9200

    image_1d09cigbp1642golb9osj1usck1.png-26.3kB

     

    5.4 把elasticsearch目录的用户和属主都更新为elk

    chown -R elk:elk /usr/local/elasticsearch

    image_1d09cjdn01j9r1lje1dh7s1e1uf0ke.png-16.9kB

     

    5.5 更改jvm的内存限制(看个人配置,这里没做修改)

    因为我们实验环境是虚拟机,1g内存一会儿就会被跑满,就会很慢。所以,我们要调整内存占用的限制。

    cat -n /usr/local/elasticsearch/config/jvm.options | sed -n '22p;23p'

     
    1. 22 -Xms1g
    2. 23 -Xmx1g

    image_1d09ck67j1br8lig9l11vaq1idplb.png-13.1kB


    vim /usr/local/elasticsearch/config/jvm.options --->这里没做修改

    cat -n /usr/local/elasticsearch/config/jvm.options | sed -n '22p;23p'

     
    1. 22 -Xms100M
    2. 23 -Xmx100M
     

    5.6 编辑elasticsearch启动脚本,使用-d进行后台启动。

    vim /usr/local/elasticsearch/bin/start.sh

    cat /usr/local/elasticsearch/bin/start.sh

     
    1. /usr/local/elasticsearch/bin/elasticsearch -d >> /tmp/elasticsearch.log 2>> /tmp/elasticsearch.log

    chmod a+x /usr/local/elasticsearch/bin/start.sh

    image_1d09coq0d1q7m1faqvpgg9611ahlo.png-32.9kB

     

    5.7 启动elasticsearch

    su -s /bin/bash elk '/usr/local/elasticsearch/bin/start.sh'

    ps -ef | grep elk | grep -v grep

    image_1d09cplna1uso2n1tv5qui1o9nm5.png-65.6kB

     

    5.8 观察日志,看看kibana日志还会不会报elasticsearch错误

    > /tmp/kibana.log

    tail -f /tmp/kibana.log

    重新刷新url:http://192.168.200.70:5609

    观察日志,看看还有没有报错。

    image_1d09d3mm2mpe1mef143kj1i149p2m.png-326.7kB


    image_1d09d2ctl16481i0q11sf1lncj9129.png-238.3kB

     

    备注说明

    假如elasticsearch如果监听在非127.0.0.1,那么需要修改内核参数等,在这里就不多说了。

     

    六,logstash的安装和启动

     

    6.1 logstash的下载地址

    用来读取日志,正则分析日志,发送给elasticsearch数据库

    https://artifacts.elastic.co/downloads/logstash/logstash-6.2.3.tar.gz

     

    6.2 解压部署logstash

    ls

    tar xf logstash-6.2.3.tar.gz -C /usr/local/

    mv /usr/local/logstash-6.2.3 /usr/local/logstash

    image_1d09detsnshv1k5op7c7mkkmr33.png-24.6kB

     

    6.3 更改logstash jvm配置,加入内存限制(看个人配置,这里没有修改)

     

    修改如下配置

    cat -n /usr/local/logstash/config/jvm.options | sed -n '6p;7p;'

     
    1. 6 -Xms1g
    2. 7 -Xmx1g

    image_1d09dfuh5ml2ihp1meq14k413ok3g.png-12.7kB

     

    修改成如下配置(没做修改)

    cat -n /usr/local/logstash/config/jvm.options | sed -n '6p;7p;'

     
    1. 6 -Xms150M
    2. 7 -Xmx150M
     

    6.4 修改logstash配置文件

     

    配置文件没有,需要新建

    vim /usr/local/logstash/config/logstash.conf

    cat /usr/local/logstash/config/logstash.conf

     
    1. input {
    2. file {
    3. path => "/usr/local/nginx/logs/kibana_access.log" #读取日志路径
    4. }
    5. }
    6. output {
    7. elasticsearch {
    8. hosts => ["http://127.0.0.1:9200"] #保存日志url
    9. }
    10. }

    image_1d09dn9591lhjsbe31h25h9b94d.png-24.4kB

     

    6.5 logstash的启动脚本

    vim /usr/local/logstash/bin/start.sh

    cat /usr/local/logstash/bin/start.sh

     
    1. nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf >> /tmp/logstash.log 2>> /tmp/logstash.log &

    chmod a+x /usr/local/logstash/bin/start.sh

    image_1d09dot8j1he1g3mb8s6u414l04q.png-33kB

     

    6.6 启动logstash

    logstash并没有监听端口,因此不需要用elk用户来启动

    /usr/local/logstash/bin/start.sh

    ps -ef | grep logstash

    image_1d09dpmvlinr1n41o3r16fir4757.png-99.5kB

     

    特别提示

    logstash启动的比较慢,需要多等一会儿。 
    如果在kibana的Discover里能看到添加索引就说明logstash启动好了

    image_1d09e591718c1bkjdkdbks13o5k.png-147.7kB

     

    6.7 在kibana上配置索引,展现获取的kibana日志数据

    image_1d09e768k16kf1kki1lte1g8v1tol61.png-141kB


    image_1d09e8r6n116vngvlie10r9h6s6u.png-143.2kB


    image_1d09ebv42j5q1n2q19hk9b51n908b.png-196.3kB


    图片说明image_1crs4fqsb13sh1ojro67feh1k3d3h.png-304.7kB

    image_1d09k2tbm1houcb81obn1fp62m99.png-226.8kB


    进行数据展现字段的筛选

    image_1d09k7k3j115u10s81m7lmrl11flm.png-222.8kB


    image_1d09kuu4vjhadqu1mii147473m13.png-225.1kB


    对nginx的kibana_access.log进行数据追踪,对比分析

    tail -f /usr/local/nginx/logs/kibana_access.log

    image_1d09l3gsp6o847k228gsqaji1t.png-231.3kB


    image_1d09l2blv5a1nn4p4k1r791p1n1g.png-235.1kB

     

    七,logstash使用详解

     

    执行下边的命令

    ps -ef | grep logstash

    kill -9 17120

    /usr/local/logstash/bin/logstash -e ""

    welcome --->输入的内容

     
    1. {
    2. "@version" => "1",
    3. "@timestamp" => 2018-08-16T13:18:13.383Z,
    4. "message" => "welcome",
    5. "type" => "stdin",
    6. "host" => "elkstack"
    7. }

    可以看到logstash结尾自动添加了几个字段,时间戳@timestamp,版本@version,输入的类型type,以及主机名host

    image_1d09grf7ja1v421jnfh6l2jk8r.png-189.9kB

     

    7.1 logstash工作原理

    Logstash使用管道方式进行日志的搜集处理和输出。有点类似于管道命令xxx|ccc|ddd,xxx执行完了会执行ccc,然后执行ddd。

    在logstash中,包括了三个阶段:

    输入input ---> 处理filter(不是必须的) ---> 输出output

    image_1crs4hbac1uvi1n2f1jtf16hr1pna55.png-65.2kB

    每个阶段都有很多的插件配合工作,比如file,elasticsearch,redis等

    每个阶段也可以指定多种方式,比如输出既可以输出到elasticsearch中,也可以指定到stdout在控制台打印。

    由于这种插件式的组织方式,使得logstash变得易于扩展和定制

     

    7.2 命令行中常用的命令

    -f:通过这个命令可以指定Logstash的配置文件,根据配置文件配置logstash

    -e:后面跟着字符串,该字符串可以被当作logstash的配置(如果是""则默认使用stdin作为默认输入,stdout作为默认输出)

    -l:日志输出的地址(默认就是stdout直接在控制台中输出)

    -t:测试配置文件是否正确,然后退出。

     

    7.3 配置文件说明

    前面介绍过logstash基本上由三部分组成,input,output以及用户需要才添加的filter,因此标准的配置文件格式如下:

     
    1. input {...}
    2. filter {...}
    3. output {...}

    image_1d099vcf213lajap1ebtfbb1m81gr.png-92.4kB


    在每个部分中,也可以指定多个访问方式,例如我想要指定两个日志来源文件,则可以这样写:

     
    1. input {
    2. file { path => "/var/log/messages" type => "syslog" }
    3. file { path => "/var/log/apache/access.log" type => "apache" }
    4. }

    类似的,如果在filter中添加了多种处理规则,则按照它的顺序----处理,但是有一些插件并不是线程安全的。

    比如在filter中指定了两个一样的插件,这两个任务并不能保证准确的按顺序执行,因此官方也推荐避免在filter中重复使用插件。

     

    八,利用logstash的正则进行日志信息的抓取测试

    我们更改一下logstash的配置文件进行正则抓取数据的测试。

     

    logstash提取数据段配置文件模板详解

    cd /usr/local/logstash/config/

    vim logstash.conf

    cat logstash.conf

     
    1. input {
    2. stdin{} #从标准输入读取数据
    3. }
    4. filter {
    5. grok {
    6. match => {
    7. "message" => '(?<字段名>正则表达式).*'
    8. }
    9. }
    10. }
    11. output {
    12. elasticsearch { #如果要输入到elasticsearch里,那么需要注释掉stdout{}
    13. hosts => ["http://127.0.0.1:9200"]
    14. }
    15. stdout { #只将信息输出到屏幕上
    16. codec => rubydebug #用于正则提取测试,将正则抓取结果输出到屏幕上
    17. }
    18. }
     

    杀掉后台的logstash进程

    ps -ef | grep logstash --->查询PID号

    kill -9 PID号

    image_1d09lj1b5h3kilrk9f1k6013q334.png-95.8kB

     

    为了测试方便,我们暂时交互式启动logstash

    /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

     

    8.1 测试性抓取日志字段

     

    用于进行测试输入的日志内容

    Aug 16 18:29:49 ELK systemd: Startup finished in 789ms (kernel) + 1.465s (initrd) + 18.959s (userspace) = 21.214s.

     

    修改logstash配置文件

    vim /usr/local/logstash/config/logstash.conf

    cat /usr/local/logstash/config/logstash.conf

     
    1. input {
    2. stdin{}
    3. }
    4. filter {
    5. grok {
    6. match => {
    7. "message" => '(?<mydate>[a-zA-Z]+ [0-9]+ [0-9:]+) (?<hostname>[a-zA-Z]+).*'
    8. }
    9. }
    10. }
    11. output {
    12. elasticsearch {
    13. hosts => ["http://127.0.0.1:9200"]
    14. }
    15. stdout {
    16. codec => rubydebug
    17. }
    18. }

    image_1d09hisgb1qdn1papq7oad9ebv98.png-35.8kB

     

    交互式启动logstash

    /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

    image_1d09hjd2umi41f5b1r2eluoli19l.png-8kB

     

    输出结果如下

    Aug 16 18:29:49 ELK systemd: Startup finished in 789ms (kernel) + 1.465s (initrd) + 18.959s (userspace) = 21.214s.

     
    1. {
    2. "hostname" => "ELK", #这就是抓取的字段
    3. "mydate" => "Aug 16 18:29:49", #这就是抓取的字段
    4. "@timestamp" => 2018-08-16T12:47:46.904Z,
    5. "message" => "Aug 16 18:29:49 ELK systemd: Startup finished in 789ms (kernel) + 1.465s (initrd) + 18.959s (userspace) = 21.214s.",
    6. "host" => "elkstack",
    7. "@version" => "1"
    8. }

    image_1d09hopkn13infr872618fjlkuao.png-206kB

    请通过配置文件进行反复测试验证,熟悉logstash正则表达的使用方法

     

    8.2 将抓取的字段信息输入到elasticsearch并显示在kibana上

     

    logstash配置文件如下

    vim /usr/local/logstash/config/logstash.conf

    cat /usr/local/logstash/config/logstash.conf

     
    1. input {
    2. stdin{}
    3. }
    4. filter {
    5. grok {
    6. match => {
    7. "message" => '(?<mydate>[a-zA-Z]+ [0-9]+ [0-9:]+) (?<hostname>[a-zA-Z]+).*'
    8. }
    9. }
    10. }
    11. output {
    12. elasticsearch {
    13. hosts => ["http://127.0.0.1:9200"]
    14. }
    15. # stdout {
    16. # codec => rubydebug
    17. # }
    18. }

    image_1d09hv1uds3p1ect56lp4n124tbl.png-36.5kB

     

    用于进行测试输入的日志内容

    /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

    Aug 16 18:29:49 ELK systemd: Startup finished in 789ms (kernel) + 1.465s (initrd) + 18.959s (userspace) = 21.214s.

    image_1d09lhj3s1hvq1ed2138d18omfi22n.png-179.2kB


    image_1d09lh8rb6sf62t1rca6jdqhg2a.png-172.5kB

     

    九,elk技术全量分析nginx日志

    logstash如果直接把一整行日志直接发送给elasticsearch,kibana显示出来就没有什么意义,我们需要提取自己想要的字段。假如说我们想要提取响应码,用户访问url,响应时间等,就得依靠正则来提取。

     

    logstash提取数据段配置文件模板详解

     
    1. input { #日志输入来源函数
    2. file {
    3. path => "/usr/local/nginx/logs/kibana_access.log"
    4. }
    5. }
    6. filter { #字段数据提取函数
    7. grok {
    8. match => {
    9. "message" => '(?<字段名>正则表达式).*'
    10. }
    11. }
    12. }
    13. output { #数据输出目的地函数
    14. elasticsearch {
    15. hosts => ["http://127.0.0.1:9200"]
    16. }
    17. }
     

    9.1 利用正则从message中提取kibana访问日志的IP地址

    image_1crs4ihgn14a1d1l55snp51cq6c.png-48.6kB

    vim /usr/local/logstash/config/logstash.conf

    cat /usr/local/logstash/config/logstash.conf

     
    1. input {
    2. file {
    3. path => "/usr/local/nginx/logs/kibana_access.log"
    4. }
    5. }
    6. filter {
    7. grok {
    8. match => {
    9. "message" => '(?<IP>[0-9.]+) .*'
    10. }
    11. }
    12. }
    13. output {
    14. elasticsearch {
    15. hosts => ["http://127.0.0.1:9200"]
    16. }
    17. }

    image_1d09lnnkr198ifqo1et718ssrom3h.png-32kB

     

    交互式启动logstash

    /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

    image_1d09m0p3k981isttd4ua46g33u.png-169kB

     

    检查测试结果

    image_1d09m1ji8l4o1prl507ls1ujt4b.png-162.3kB


    image_1d09m300e7uo11r1v0sgsv1jdd4o.png-223.3kB

     

    9.2 从message中提取kibana访问日志的time,url,返回码,字节大小

    vim /usr/local/logstash/config/logstash.conf

    cat /usr/local/logstash/config/logstash.conf

     
    1. input {
    2. file {
    3. path => "/usr/local/nginx/logs/kibana_access.log"
    4. }
    5. }
    6. filter {
    7. grok {
    8. match => {
    9. "message" => '(?<IP>[0-9.]+) .*HTTP/[0-9.]+"(?<mark>[0-9]+) (?<size>[0-9]+)[ "]+(?<url>[a-zA-Z]+://[0-9.]+:[0-9]+/[a-zA-Z/]+)".*'
    10. }
    11. }
    12. }
    13. output {
    14. elasticsearch {
    15. hosts => ["http://127.0.0.1:9200"]
    16. }
    17. }

    image_1d09m56r81tnhrc51ts3146p1lql55.png-42.6kB

     

    交互式启动logstash

    /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

    image_1d09m6srm15j4f3a6ncag73a5i.png-170.5kB

     

    检查测试结果

    image_1d09m89gbo1flpr1duf1squ1fr25v.png-193.2kB

  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
  • 原文地址:https://www.cnblogs.com/linyaonie/p/11231181.html
Copyright © 2011-2022 走看看