使用docker安装elk的详细步骤

  • Post category:Python

安装ELK的步骤分为以下几个部分:

  1. 安装Docker:这里不再赘述,可以参考Docker官网或者其他教程。

  2. 拉取ELK镜像:

docker pull sebp/elk

注:这里使用的是sebp/elk镜像,该镜像包含了Elasticsearch、Logstash和Kibana三个组件,并且已经配置好了它们之间的关系。

  1. 启动ELK容器:

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk

参数说明:

  • -p:映射容器端口到主机端口,其中,5601是Kibana的端口,9200是Elasticsearch的HTTP端口,5044是Logstash的端口。

  • -it:以交互式方式启动容器。

  • --name:指定容器名称。

  • sebp/elk:使用的镜像名称。

  • 访问Kibana:

打开浏览器,访问http://your_ip:5601,即可访问Kibana控制台。

  1. 配置Logstash:

Logstash是用于接收、解析和处理日志数据的工具,可以通过配置文件进行配置。假设我们要收集Docker的日志数据,可以按照以下步骤进行配置:

  • 创建配置文件docker-logstash.conf,内容如下:

    “`
    input {
    gelf {
    port => “12201”
    }
    }

    output {
    elasticsearch {
    hosts => “elasticsearch:9200”
    index => “docker-%{+YYYY.MM.dd}”
    }
    }
    “`

    该配置文件表示使用gelf协议接收日志数据,并将数据输出到Elasticsearch中,并指定了Index名称为docker-当前日期。

  • 将配置文件挂载到Logstash容器中:

    docker run -v /path/to/docker-logstash.conf:/etc/logstash/conf.d/docker-logstash.conf --link elk:elasticsearch -it --name logstash sebp/elk logstash -f /etc/logstash/conf.d/docker-logstash.conf

    参数说明:

    • -v:将主机上的配置文件挂载到容器中,例如:/path/to/docker-logstash.conf是本地的配置文件路径,/etc/logstash/conf.d/docker-logstash.conf是目标路径。

    • --link:与Elasticsearch容器进行链接。

    • -it:以交互式方式启动容器。

    • --name:指定容器名称。

    • sebp/elk:使用的镜像名称。

    • logstash -f /etc/logstash/conf.d/docker-logstash.conf:启动Logstash服务,并指定配置文件路径。

当Logstash开始工作时,它将从Docker容器发送到12201端口上的日志数据,并将它们存储到Elasticsearch的docker-index索引中。

至此,ELK安装和配置完毕,现在可以通过访问Kibana控制台来查看和分析日志数据了。

示例:

  1. 收集Apache日志:

    “`
    input {
    file {
    path => “/var/log/apache2/access.log”
    type => “apache_access”
    }
    }

    filter {
    if [type] == “apache_access” {
    grok {
    match => { “message” => “%{COMBINEDAPACHELOG}” }
    }

          date {
              match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
          }
      }
    

    }

    output {
    elasticsearch {
    hosts => “elasticsearch:9200”
    index => “apache-%{+YYYY.MM.dd}”
    }
    }
    “`

    该配置文件表示从Apache的access.log文件中收集日志数据,使用grok插件对数据进行解析和处理,并将处理后的数据输出到Elasticsearch中,并指定Index名称为apache-当前时间。

  2. 收集MySQL慢查询日志:

    “`
    input {
    file {
    path => “/var/log/mysql/mysql-slow.log”
    type => “mysql_slow_query”
    start_position => “beginning”
    }
    }

    filter {
    if [type] == “mysql_slow_query” {
    grok {
    match => { “message” => “# Time: %{DATA:time}\n# User@Host: %{DATA:user_host}\n# Query_time: %{NUMBER:query_time:float} Lock_time: %{NUMBER:lock_time:float} Rows_sent: %{NUMBER:rows_sent:float} Rows_examined: %{NUMBER:rows_examined:float}\n%{GREEDYDATA:sql_text}” }
    }

          dissect {
              mapping => {
                  "user_host" => "%{user}@%{host}"
              }
          }
    
          mutate {
              convert => {
                  "query_time" => "float"
                  "lock_time" => "float"
                  "rows_sent" => "integer"
                  "rows_examined" => "integer"
              }
          }
      }
    

    }

    output {
    elasticsearch {
    hosts => “elasticsearch:9200”
    index => “mysql-slow-query-%{+YYYY.MM.dd}”
    }
    }
    “`

    该配置文件表示从MySQL的slow.log文件中收集慢查询日志,并对日志数据进行解析和处理,并将处理后的数据输出到Elasticsearch中,并指定Index名称为mysql-slow-query-当前时间。