美文网首页linux
ELK系列之一:安装和基本使用

ELK系列之一:安装和基本使用

作者: 小六的昵称已被使用 | 来源:发表于2019-02-20 19:57 被阅读18次

    title: ELK系列之一:安装和基本使用
    categories: Linux
    tags:
    - ELK
    timezone: Asia/Shanghai
    date: 2019-02-02


    ELK介绍

    需求背景:

    业务发展越来越庞大,服务器越来越多
    各种访问日志、应用日志、错误日志量越来越多,导致运维人员无法很好的去管理日志
    开发人员排查问题,需要到服务器上查日志,不方便
    运营人员需要一些数据,需要我们运维到服务器上分析日志
    

    为什么要用到ELK:

    一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。
    但在规模较大也就是日志量多而复杂的场景中,此方法效率低下,
    面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。
    需要集中化的日志管理,所有服务器上的日志收集汇总。
    常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
    
    大型系统通常都是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,
    大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,
    构建一套集中式日志系统,可以提高定位问题的效率。
    

    一个完整的集中式日志系统,需要包含以下几个主要特点:

    收集-能够采集多种来源的日志数据
    传输-能够稳定的把日志数据传输到中央系统
    存储-如何存储日志数据
    分析-可以支持 UI 分析
    警告-能够提供错误报告,监控机制
    

    ELK简介:

    ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana , 它们都是开源软件。
    不过现在还新增了一个Beats,它是一个轻量级的日志收集处理工具(Agent)
    Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具,
    目前由于原本的ELK Stack成员中加入了 Beats 工具所以已改名为Elastic Stack。
    

    为什么被采集端使用 Filebeat ,而不用原来的 Logstash 呢?

    原因很简单,资源消耗比较大。
    由于 Logstash 是跑在 JVM 上面,资源消耗比较大
    后来作者用 GO 写了一个功能较少但是资源消耗也小的轻量级的 Agent 叫 Logstash-forwarder。
    后来作者加入 elastic.co 公司, Logstash-forwarder 的开发工作给公司内部 GO 团队来搞,最后命名为 Filebeat。
    Filebeat 需要部署在每台应用服务器上,可以通过 Salt 来推送并安装配置。
    
    image image

    整体架构

    Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。

    Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

    Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

    Filebeat:轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。

    环境

    [root@centos181002 httpd]# cat /etc/centos-release
    CentOS Linux release 7.6.1810 (Core)
    
    [root@centos181001 home]# java -version
    java version "1.8.0_192"
    Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
    
    Elastic Stack 6.6.0
    

    第一步:系统初始化设置

    1.关闭系统默认防火墙(支持REHL\CentOS6和7)

    setenforce 0
    sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
    which systemctl && systemctl stop firewalld
    which systemctl && systemctl disable firewalld
    which systemctl && systemctl stop iptables || service iptables stop
    which systemctl && systemctl disable iptables || chkconfig iptables off
    

    2.安装JDK环境

    Elasticsearch requires Java 8 or later. Use the official Oracle distribution or an open-source distribution such as OpenJDK.

    官方建议使用Oracle JDK1.8.0.131或更高,这里我们使用的是1.8.0.192

    # 解压并重命名
    tar vxf jdk-8u192-linux-x64.tar.gz
    mv jdk1.8.0_192 jdk
    
    # 修改环境变量并提前备份原始文件
    /bin/grep 666666 /etc/profile && /bin/cp /etc/profile.666666 /etc/profile || /bin/cp /etc/profile /etc/profile.666666
    cat <<EOF >>/etc/profile
    export JAVA_HOME=/home/jdk
    export CLASSPATH=.:\${JAVA_HOME}/jre/lib/rt.jar:\${JAVA_HOME}/lib/dt.jar:\${JAVA_HOME}/lib/tools.jar
    export PATH=\$PATH:\${JAVA_HOME}/bin
    EOF
    source /etc/profile
    

    第二步:安装Elasticsearch

    配置文件:/etc/elasticsearch/

    启动日志:/var/log/messages

    默认日志:/var/log/elasticsearch

    官方安装说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

    1.下载并安装

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.rpm
    rpm -ivh elasticsearch-6.6.0.rpm
    

    2.修改配置文件

    # 1.修改监听IP和监听端口
    cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
    vim /etc/elasticsearch/elasticsearch.yml
    
    network.host: 11.11.11.61
    http.port: 9200
    
    
    # 2.为elasticsearch设置jdk路径,否则启动时候会报错
    cp /etc/sysconfig/elasticsearch /etc/sysconfig/elasticsearch.bak
    vim /etc/sysconfig/elasticsearch
    
    JAVA_HOME=/home/jdk
    

    3.启动服务

    systemctl daemon-reload
    systemctl enable elasticsearch.service
    systemctl start elasticsearch.service
    systemctl status elasticsearch.service
    

    4.检查程序是否正常运行。

    # 1.查看服务状态是否正常
    systemctl status elasticsearch.service
    
    # 2.查看监听端口是否正常(elasticsearch会监听9200和9300两个端口)
    # 虽然我们这里是单机模式,不过9300一样会正常监听
    # 9200则是数据传输时用的
    # 9300端口是集群通信用的
    netstat -lntp |grep java
    
    # 3.查看进程是否正常
    ps aux | grep elasticsearch
    
    # 4.检查9200端口返回状态
    # 也可以通过浏览器此地址测试:http://11.11.11.61:9200/
    curl -X GET "11.11.11.61:9200/"
    
    [root@centos181001 elasticsearch]# curl -X GET "11.11.11.61:9200/"
    {
      "name" : "iI1f5lo",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "1QFZh0mDQHWmW5uJJnXixw",
      "version" : {
        "number" : "6.6.0",
        "build_flavor" : "default",
        "build_type" : "rpm",
        "build_hash" : "a9861f4",
        "build_date" : "2019-01-24T11:27:09.439740Z",
        "build_snapshot" : false,
        "lucene_version" : "7.6.0",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
      },
      "tagline" : "You Know, for Search"
    }
    

    使用浏览器显示出来的也是一堆字符串,我们希望这些信息能以图形化的方式显示出来,那就需要安装kibana来为我们展示这些数据了。

    第三步:安装Kibana

    配置文件:/etc/kibana/

    官方安装说明:https://www.elastic.co/guide/en/kibana/6.6/index.html

    1.下载并安装

    wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.0-x86_64.rpm
    rpm -ivh kibana-6.6.0-x86_64.rpm
    

    2.修改配置文件

    # 1.修改Kibana服务监听IP、监听端口、配置elasticsearch地址
    # elasticsearch为es服务器的ip,如果是集群则配置该集群中主节点的ip
    cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
    vim /etc/kibana/kibana.yml
    
    server.port: 5601
    server.host: "11.11.11.61"
    elasticsearch.hosts: ["http://11.11.11.61:9200"]
    

    3.启动并设置开机自动启动

    systemctl enable kibana
    systemctl stop kibana
    systemctl start kibana
    systemctl status kibana
    

    4.检查程序是否正常

    # 1.检查默认监听端口
    # 由于kibana是使用node.js开发的,所以进程名称为node
    netstat -lntp |grep 5601
    
    # 2.查看进程
    ps aux | grep kibana
    

    5.打开浏览器访问管理页面

    打开浏览器里进行访问,由于我们并没有安装x-pack,所以此时是没有用户名和密码的,可以直接访问的。

    到此我们的kibana就安装完成了,很简单,接下来就是安装logstash,不然kibana是没法用的。

    http://11.11.11.61:5601
    

    到此我们的kibana就安装完成了,很简单,接下来就是安装logstash,不然kibana是没法用的。

    第四步:安装Logstash

    程序如果启动错误或者端口没有正常监听,可以到/var/log/message查看日志

    1.下载安装

    wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.rpm
    rpm -ivh logstash-6.6.0.rpm
    

    2.安装以后先不要启动服务,先配置Logstash收集syslog日志并测试

    1.创建文件并编辑

    cat <<EOF >/etc/logstash/conf.d/syslog.conf
    input {  # 定义日志源
      syslog {
        type => "system-syslog"  # 定义类型
        port => 10514    # 定义监听端口
      }
    }
    
    output {  # 定义日志输出
      stdout {
        codec => rubydebug  # 将日志输出到当前的终端上显示
      }
    }
    EOF
    cat /etc/logstash/conf.d/syslog.conf
    

    2.检查配置文件是否有错误

    /usr/share/logstash/bin/logstash \
            --path.settings /etc/logstash/ \
            -f /etc/logstash/conf.d/syslog.conf \
            --config.test_and_exit
    
    --path.settings 用于指定logstash的配置文件所在的目录
    -f 指定需要被检测的配置文件的路径
    --config.test_and_exit 指定检测完之后就退出,不然就会直接启动了
    
    # 显示Configuration OK代表配置没问题
    [root@centos181001 conf.d]# /usr/share/logstash/bin/logstash \
    >         --path.settings /etc/logstash/ \
    >         -f /etc/logstash/conf.d/syslog.conf \
    >         --config.test_and_exit
    Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
    [2019-02-02T03:06:08,558][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/var/lib/logstash/queue"}
    [2019-02-02T03:06:08,582][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/var/lib/logstash/dead_letter_queue"}
    [2019-02-02T03:06:09,714][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
    Configuration OK
    [2019-02-02T03:06:21,137][INFO ][logstash.runner          ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
    

    3.配置kibana服务器的ip以及配置的监听端口:

    # 1.编辑并在#### RULES ####位置增加以下行(IP地址为本机监听IP地址和端口)
    vim /etc/rsyslog.conf
    *.* @@11.11.11.61:10514
    
    # 2.重启rsyslog,让配置生效
    systemctl restart rsyslog
    

    4.指定配置文件,启动logstash测试

    /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf
    
    # 等待出现以下信息
    [root@centos181001 conf.d]# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf
    Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
    [2019-02-02T03:16:57,098][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
    [2019-02-02T03:16:57,192][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.6.0"}
    [2019-02-02T03:16:57,259][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"b98c03ce-ca73-4b08-a392-653913d80883", :path=>"/var/lib/logstash/uuid"}
    [2019-02-02T03:17:11,739][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
    [2019-02-02T03:17:12,794][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x1b532bc9 run>"}
    [2019-02-02T03:17:12,892][INFO ][logstash.inputs.syslog   ] Starting syslog udp listener {:address=>"0.0.0.0:10514"}
    [2019-02-02T03:17:12,913][INFO ][logstash.inputs.syslog   ] Starting syslog tcp listener {:address=>"0.0.0.0:10514"}
    [2019-02-02T03:17:13,011][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
    [2019-02-02T03:17:13,751][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
    

    5.检查10514端口是否已被监听

    netstat -antp | grep 10514
    

    6.用另外机器ssh登录到这台服务器,看看是否有日志输出

    应该可以看到很多以JSON的格式打印的收集到的日志
    

    3.配置Logstash

    以上只是测试的配置,这一步我们需要重新改一下配置文件,让收集的日志信息输出到es服务器中,而不是当前终端

    1.编辑配置文件

    cat <<EOF >/etc/logstash/conf.d/syslog.conf
    input {
      syslog {
        type => "system-syslog"
        port => 10514
      }
    }
    
    output {
      elasticsearch {
        hosts => ["11.11.11.61:9200"]  # 定义es服务器的ip
        index => "system-syslog-11.11.11.61-%{+YYYY.MM}" # 定义索引
      }
    }
    EOF
    cat /etc/logstash/conf.d/syslog.conf
    

    2.为Logstash手动指定JAVA_HOME,否则启动程序会报错

    cp /usr/share/logstash/bin/logstash.lib.sh /usr/share/logstash/bin/logstash.lib.sh.bak
    vim /usr/share/logstash/bin/logstash.lib.sh
    JAVA_HOME=/home/jdk
    

    3.检测配置文件是否有错误

    /usr/share/logstash/bin/logstash \
        --path.settings /etc/logstash/ \
        -f /etc/logstash/conf.d/syslog.conf \
        --config.test_and_exit
    

    4.将以下两个文件夹所有者改为logstash,否则启动的时候会因为没有权限报错

    chown -R logstash:logstash /var/log/logstash/
    chown -R logstash:logstash /var/lib/logstash/
    

    5.修改Logstash默认监听IP

    cp /etc/logstash/logstash.yml /etc/logstash/logstash.yml.bak
    vim /etc/logstash/logstash.yml
    http.host: "11.11.11.61"
    

    4.测试OK后启动并设置开机自动启动

    systemctl enable logstash
    systemctl stop logstash
    systemctl start logstash
    systemctl status logstash
    

    5.检查是否是否正常启动

    # 1.检查进程
    ps aux |grep logstash
    
    # 2.查看服务状态
    systemctl status logstash
    
    # 3.查看监听端口
    netstat -antp | grep -E '9600|10514'
    

    6.可以使用以下命令查看索引

    curl '11.11.11.61:9200/_cat/indices?v'
    
    # 这里可以看到上边我们配置的:
    # index => "system-syslog-11.11.11.61-%{+YYYY.MM}" # 定义索引
    

    第五步:登录Kibana查看

    到这里我们已经可以实现了将本地的message日志归档并可使用Kibana查看

    1.登录Kibana

    http://11.11.11.61:5601
    

    2.需要设置索引才能够查看。

        - Management 
        - Create index pattern 
        - 选择刚才添加索引名称,可以使用通配符,比如:system-syslog*,然后点击【Next step】
        - 选择【@timestamp】后点击【Create index pattern】
    

    3.查看日志

        - Discover
            在这里可以跟在搜索框里搜索任意想要查找的日志内容。
    

    第六步:使用Filebeat采集日志

    之前也介绍过beats是ELK体系中新增的一个工具,它属于一个轻量的日志采集器,以上我们使用的日志采集工具是logstash,但是logstash占用的资源比较大,没有beats轻量,所以官方也推荐使用beats来作为日志采集工具。而且beats可扩展,支持自定义构建。

    这里我们新增一台测试服务器11.11.11.62来安装Filebeat并将日志发送到ES服务器

    1.关闭系统默认防火墙(支持REHL\CentOS6和7)

    setenforce 0
    sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
    which systemctl && systemctl stop firewalld
    which systemctl && systemctl disable firewalld
    which systemctl && systemctl stop iptables || service iptables stop
    which systemctl && systemctl disable iptables || chkconfig iptables off
    

    2.下载安装

    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.0-x86_64.rpm
    rpm -ivh filebeat-6.6.0-x86_64.rpm
    

    3.测试配置

    1.先将配置文件备份

    cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.bak
    

    2.过滤掉#开头的备注内容和空行,方便修改查看

    cat /etc/filebeat/filebeat.yml.bak | grep -v '^#' | grep -v '^  #' | grep -v '^$' > /etc/filebeat/filebeat.yml
    

    3.修改配置文件

    [root@centos181002 ~]# cat /etc/filebeat/filebeat.yml
    filebeat.inputs:
    - type: log
    # 本行注释掉
    #  enabled: false
    
    # 这里是日志路径可以有多条
      paths:
    #    - /var/log/*.log
         - /var/log/messages
        #- c:\programdata\elasticsearch\logs\*
    
    filebeat.config.modules:
      path: ${path.config}/modules.d/*.yml
      reload.enabled: false
    
    setup.template.settings:
      index.number_of_shards: 3
    
    setup.kibana:
    
    # 这里先注释掉,设定输出到控制台先测试
    #output.elasticsearch:
    #  hosts: ["localhost:9200"]
    
    # 新增这里,让日志输出到控制台,以测试
    output.console:  # 指定在终端上输出日志信息
      enable: true
    
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~
    

    4.修改完以上配置后执行以下命令,查看是否有日志输出,终端内有打印日志说明配置正常

    /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml
    

    4.修改为正式配置文件并启动程序

    1.修给配置文件为以下内容

    [root@centos181002 ~]# cat /etc/filebeat/filebeat.yml
    filebeat.inputs:
    - type: log
    # 本行注释掉
    #  enabled: false
    
    # 这里是日志路径可以有多条
      paths:
    #    - /var/log/*.log
         - /var/log/messages
        #- c:\programdata\elasticsearch\logs\*
    
    filebeat.config.modules:
      path: ${path.config}/modules.d/*.yml
      reload.enabled: false
    
    setup.template.settings:
      index.number_of_shards: 3
    
    setup.kibana:
    
    # 这里设定ES服务器地址
    output.elasticsearch:
      hosts: ["11.11.11.61:9200"]
    
    # 新增这里,让日志输出到控制台,以测试,测试部分注释掉
    #output.console:  # 指定在终端上输出日志信息
    #  enable: true
    
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~
    

    2.启动Filebeat服务并设置开机自动启动

    systemctl enable filebeat
    systemctl stop filebeat
    systemctl start filebeat
    systemctl status filebeat
    

    3.查看服务是否正常

    # 1.查看服务状态
    systemctl status filebeat
    
    # 2.查看进程
    ps aux | grep filebeat
    
    # 3.查看ES服务器上是否新增了一个以filebeat-6.0.0开头的索引
    # 这就代表filesbeat和es能够正常通信了
    curl '11.11.11.61:9200/_cat/indices?v' 
    

    4.登录ES管理页面,配置索引,并查看日志。

    - 登录页面:http://11.11.11.61:5601
    - Management
    - Index Patterns
    - Create index pattern
    - 填写Index pattern(索引模式,支持通配符,比如:filebeat-6.6.0*)后【Next step】
    - Time Filter field name选择【@timestamp】后点击【Create index pattern】
    - 到Discover可以查看系统收集到的日志。
    

    5.在以上基础上增加httpd日志搜集

    因为filebeat日志路径是支持多条的,所以这里只需要将需要采集的日志路径填入配置文件即可。

    1.安装httpd

    yum install -y httpd
    

    2.修改filebeat配置文件以搜集httpd日志
    httpd默认日志路径:/var/log/httpd/

    vim /etc/filebeat/filebeat.yml
    在paths:处增加以下内容:
    - /var/log/httpd/
    

    3.重启Filebeat服务并启动httpd服务

    systemctl stop filebeat
    systemctl start filebeat
    systemctl start httpd
    systemctl status filebeat httpd
    

    4.打开浏览器访问httpd服务,并到ES服务器查看是否有httpd日志被采集。

    第六步:汉化

    作者主页:https://github.com/anbai-inc

    结语:到这里ELK的架设和简单使用基本OK,更深入的使用和其他内容将抽时间继续整理。

    附录:

    所用到离线包下载:https://pan.baidu.com/s/16uVQL-d5HdgjajzCpY2e3g

    官方安装:https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html

    中文官网:https://www.elastic.co/cn/products

    ELKstack中文指南:https://elkguide.elasticsearch.cn/logstash/examples/nginx-access.html

    不错的文章(亿级 ELK 日志平台构建实践):http://blog.51cto.com/13527416/2117141

    搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群:http://blog.51cto.com/zero01/2079879

    搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器:http://blog.51cto.com/zero01/2082794

    相关文章

      网友评论

        本文标题:ELK系列之一:安装和基本使用

        本文链接:https://www.haomeiwen.com/subject/rerkyqtx.html