Skip to content

Instantly share code, notes, and snippets.

@ericzhong
Last active October 9, 2018 21:05
Show Gist options
  • Save ericzhong/e22d7fb05df051461de96a88ae6ad389 to your computer and use it in GitHub Desktop.
Save ericzhong/e22d7fb05df051461de96a88ae6ad389 to your computer and use it in GitHub Desktop.
ELK 安装与使用

介绍

ELK = Elasticsearch + Logstash + Kibana,都是 Elastic 公司的产品。

Elastic Stack 目前包含组件 Beats、Elasticsearch、Elasticsearch Hadoop、Kibana、Logstash、X-Pack。

安装

安装顺序为:Logstash -> Elasticsearch -> Kibana。

数据流向为:stdin -> Logstash -> Redis -> Logstash -> Elasticsearch -> Kibana。

Redis 在这里起到队列的作用。Logstash 可以有多个进程,起到加工和转发数据的作用。

环境

CentOS 7.4
java-1.8.0-openjdk
redis-4.0.2

stdin -> Logstash -> Redis

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.3.tar.gz
tar xvf logstash-5.6.3.tar.gz
cd logstash-5.6.3/

设置环境变量:

echo "export PATH=`pwd`/bin:\$PATH" | sudo tee /etc/profile.d/logstash.sh
source /etc/profile.d/logstash.sh

测试一下:

# -e, 指定配置文本
logstash -e "input {stdin{}} output {stdout{}}"      # 输入字符串后回车,等待一会儿后将原样输出
logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'   # json 格式输出 msg info

新建 config/logstash-redis.conf

input { stdin { } }
output {
    stdout { codec => rubydebug }
    redis {
        host => '127.0.0.1'
        data_type => 'list'
        key => 'elk'     # 自定义
    }
}

启动服务:

$ logstash -f config/logstash-redis.conf    # 端口 9600

另一个终端监控 redis 状态:

$ redis-cli monitor      # 端口 6379
OK

在 logstash-redis 的终端输入消息(比如 'hello')并回车,看到如下输出:

{
      "@version" => "1",
          "host" => "localhost.localdomain",
    "@timestamp" => 2017-11-04T08:31:38.377Z,
       "message" => "hello"
}

redis 监控则输出:

1509784298.470294 [0 127.0.0.1:48522] "rpush" "logstash:redis" "{\"@version\":\"1\",\"host\":\"localhost.localdomain\",\"@timestamp\":\"2017-11-04T08:31:38.377Z\",\"message\":\"hello\"}"

这说明 stdin -> Logstash -> Redis 已经打通。redis 监控可以关闭。

Redis -> Logstash -> Elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.tar.gz
tar xvf elasticsearch-5.6.3.tar.gz
cd elasticsearch-5.6.3/

设置环境变量:

echo "export PATH=`pwd`/bin:\$PATH" | sudo tee /etc/profile.d/elasticsearch.sh
source /etc/profile.d/elasticsearch.sh

修改配置文件 config/elasticsearch.yml

network.host: 127.0.0.1     # 服务所在机器的IP

启动服务:

elasticsearch -d       # 端口 9200,9300

在 logstash 的目录中创建 conf/logstash-elasticsearch.conf

input {
    redis {
        host => '127.0.0.1'
        data_type => 'list'
        port => "6379"
        key => 'elk'
        type => 'redis-input'    # 自定义
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => '127.0.0.1'
        codec => 'json'
    }
}

启动 logstash:

# --path.data, 同一台机器上的多个进程要区分数据目录
logstash -f config/logstash-elasticsearch.conf --path.data=data2

测试一下 Elasticsearch:

curl http://localhost:9200/_search?pretty

然后,在终端 logstash-redis 中输入消息并回车,在终端 logstash-elasticsearch 中应该能看到相应输出,这表示 Redis -> Logstash -> Elasticsearch 已经打通。

Elasticsearch 的 Web 控制台

wget https://github.com/lmenezes/cerebro/releases/download/v0.7.1/cerebro-0.7.1.tgz
tar xvf cerebro-0.7.1.tgz
bin/cerebro &
# 或者
# bin/cerebro -Dhttp.port=9000 -Dhttp.address=0.0.0.0 &

用浏览器打开 http://localhost:9000,然后填入 http://localhost:9200 后点击 Connect

目前为止,所有服务及端口如下:

$ netstat -lntp  | grep "redis\|java"
# 省略部分列
0 0.0.0.0:6379     0.0.0.0:*     LISTEN      3178/redis-server * 
:::6379                 :::*     LISTEN      3178/redis-server * 
127.0.0.1:9200          :::*     LISTEN      3395/java   # elasticsearch
127.0.0.1:9300          :::*     LISTEN      3395/java   # elasticsearch       
127.0.0.1:9600          :::*     LISTEN      3291/java   # logstash-redis
127.0.0.1:9601          :::*     LISTEN      3934/java   # logstash-elasticsearch        
:::9000                 :::*     LISTEN      4330/java   # cerebro    

Kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.3-linux-x86_64.tar.gz
tar -xzf kibana-5.6.3-linux-x86_64.tar.gz
cd kibana-5.6.3-linux-x86_64/

设置环境变量:

echo "export PATH=`pwd`/bin:\$PATH" | sudo tee /etc/profile.d/kibana.sh
source /etc/profile.d/kibana.sh

修改配置 config/kibana.yml

server.host: "192.168.33.10"      # 服务所在机器的IP
elasticsearch.url: "http://localhost:9200"

启动:

kibana       # 端口 5601

用浏览器访问 http://192.168.33.10:5601

Troubleshooting

Unknown setting 'host' for elasticsearch

启动 logstash 时报错。把 host 改为 hosts 即可。

Unknown plugin lmenezes/elasticsearch-kopf

kopf 是 Elasticsearch 的 Web 管理平台,但是从 Elasticsearch 5 开始插件的接口变了,作者新维护了一个项目 lmenezes/cerebro

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment