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
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 监控可以关闭。
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 已经打通。
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
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。
启动 logstash 时报错。把 host
改为 hosts
即可。
kopf 是 Elasticsearch 的 Web 管理平台,但是从 Elasticsearch 5 开始插件的接口变了,作者新维护了一个项目 lmenezes/cerebro。