1.下载ELK包

版本选择7.10.2,可配置中文版。

logstash-7.10.2elasticsearch-7.10.2kibana-7.10.2

下载完,解压,例如:tar  -zxvf  logstash-7.10.2-linux-x86_64.tar.gz

2.ELK配置/启动

2.1 logstash配置/启动

Logstash 支持各种输入选择,例如:beats、file、http、jdbc、redis、kafka... ...,其中在文件采集时,官方建议使用beats(因为logstash是基于java开发的,需要在jvm跑。当进行采集时会对内存、cpu、io等资源消耗比较高,而beats是基于go语言开发,性能接近c语言,是专为并发而生的).

cd logstash-7.10.2/config

# 自定义配置文件
vim logstash-yjg.conf

#读
input {
    # file 从文件读取(官方推荐使用beats采集文件日志)
    file {
        path => ["/data/myProject/logs/*.log"]
        #排除不想监听的文件
        #exclude => "exclude.log"
        
        #设置多长时间扫描目录,发现新文件
        discover_interval => 1
        
        #自定义日志区分类型
        type => "ThisIsMyProjectType"

        # beginning 从文件开始处读写
        # end 文件结尾处读写
        start_position => end
    }


    # http 方式收集,用于客户端上送消息      
    http{
        id => "http_request"
        port => 9062
        codec => json
        type => "http"
    }
}


#过滤
filter {
    if [type] == "http" {
        # 把东八区时间赋值给新建的logdate 字段,logstash 不允许自建的特殊字段如带@标识的字段
        ruby{
           code => "event.set('logdate', (event.get('@timestamp').time.localtime).strftime('%Y-%m-%d %H:%M:%S'))"
        }
    } else if [type] == "nginx" {
        grok {
            match => ["message", "%{IPORHOST:host} - - \[%{HTTPDATE:logdate}\]"]
            overwrite => [ "host"]
        }  
    } else {
        grok {
            match => ["message", "%{TIMESTAMP_ISO8601:logdate}"]
        } 
    }

    date {
            match => ["logdate", "YYYY-MM-dd HH:mm:ss.SSS"]
            # 赋值给 @timestamp 
            target => "@timestamp"
    }
   
    mutate {
        # 删除不需要的字段
        remove_field => ["@version","tags","headers"]
    }
}

#输出
output{
    #输出到ES
    elasticsearch{
        # es地址
        hosts=>["127.0.0.1:9200"]  
        # es的索引名,可更改。建议使用类型区分:eg => "yjg-%{type}-%{+YYYY.MM.dd}"
        index => "yjg-logstash-%{+YYYY.MM.dd}"
    }

    #输出到控制台
    stdout{
        codec => rubydebug
    }
   
    # 输出到kafka
    #kafka {}

    # 输出到数据库
    # jdbc {
    #   driver_jar_path => "/mysql-connector-java-5.1.48.jar"
    #   driver_class => "com.mysql.jdbc.Driver"
    #   connection_string => "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&useAffectedRows=true"
    #   username => "root"
    #   password => "123456"
    #   statement => ["INSERT INTO logstash_log_temp(level, ip, content, logdate) VALUES( ?, INET_ATON(?), ? ,?)", "[level]","[host]", "[message]", "[logdate]"]
    #
    #}
}

启动

# 后台启动logstash,并加载指定配置文件
nohup ./bin/logstash -f config/logstash-yjg.conf > log.txt 2>&1 &

注意:如果out 到数据库的话,因为插件不是默认安装,所以需要手动安装

# 官方拉取插件
./bin/logstash-plugin install logstash-output-jdbc

beats采集

logstash在启动的时候会很慢,因为它基于java开发的,需要在jvm跑。当进行文件采集时会有性能问题,会消耗很大的CPU。代替方案为 beats(官方推荐)

# logstash 默认配置文件
egrep -v "#|^$" config/logstash-sample.conf

input {
  beats {
    # 开启5044端口,用于接收数据
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

数据采集器beats介绍

官方支持的beat很多,常用的就是Filebeat 和 Packebeat。 

filebeat-7.10.2packebeat-7.10.2

配置&启动

egrep -v "#|^$" filebeat.yml

# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
  # 默认是关闭的,需要手动打开
  enabled: true
  paths:
    # 数组形式,支持多个日志采集
    - /tmp/logs/*.log
    - /data/logs/*.log

# ------------------------------ Logstash Output -------------------------------
output.logstash:
  # 输出到本地logstash开启的5044端口
  hosts: ["localhost:5044"]
./filebeat -e -c filebeat.yml

2.2 elasticsearch配置/启动

cd elasticsearch-7.10.2/config

vim elasticsearch.yml

path.data: /data/elasticsearch-7.10.2/data
path.logs: /data/elasticsearch-7.10.2/logs
network.host: 127.0.0.1
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"

 注意:elaticsearch默认不能用root用户启动,否则会提示 java.lang.RuntimeException: can not run elasticsearch as root

# 为elaticsearch创建用户
groupadd elsearch
useradd elsearch -g elsearch -p elasticsearch

# 分配权限
chown -R elsearch:elsearch elasticsearch-7.10.2

# 切换用户到elsearch
su elsearch

启动

# 后台启动
./bin/elasticsearch &
# 验证启动是否成功
http://127.0.0.1::9200

{
  "name" : "my-name",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Px7djFasdfasdfa4eGTSbQ",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "747e1cc71def077253878a123123123123",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

2.3 kibana配置/启动

cd kibana-7.10.2-linux-x86_64/config

vim kibana.yml

server.port: 5601
server.host: "127.0.0.1"
server.name: "my-kibana"
elasticsearch.hosts: ["http://127.0.0.1:9200"]
kibana.index: ".kibana"
# 设置中文(注意,如果是kibana-6*版本的话,需要下载python的服务,手动翻译,替换原文件,比较麻烦,故使用7版本)
i18n.locale: "zh-CN"

启动

# 启动kibana
./bin/kibana

注意:kibana 不支持root用户启动,否则提示:Kibana should not be run as root.  Use --allow-root to continue。如果硬是要用root用户启动  就在后面加   --allow-root 

# kibana 强制使用root用户启动
./bin/kibana --allow-root

3.使用

3.1 添加索引

 

 

 

 3.2 日志展示

 

3.3 @timestamp问题

注意:@timestamp 默认为UTC时间,比北京时间采集时间少8个小时。可以在kibana高级设置中更改

至此搭建全部结束,下期分享logstash采集和kibana查询规则

Logo

更多推荐