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

  • 相关阅读:
    DDoS deflate
    stm32串口
    王立平--GUI与GUILayout的差别
    DOM模型
    Android设计模式(十二)--抽象工厂模式
    Dynamics CRM 开启EmailRouter日志记录
    python in操作引发 TypeError
    为OLED屏添加GUI支持2:2D图形库
    Bloxorz I (poj 3322 水bfs)
    URAL 1823. Ideal Gas(数学啊 )
  • 原文地址:https://www.cnblogs.com/linyaonie/p/11231181.html
Copyright © 2011-2022 走看看