centos7系统搭建ELK环境

部署架构

应用程序日志–>kafka–>logstash–>es–>kibana。

安装

Elasticsearch 需要的 Java 最低版本为 Java 8。所以第一步需要确保安装了正确版本的jdk。

我们假定elk的目录为/data/soft/elk。通过下面的命令下载es

1
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.tar.gz

然后解压缩

1
tar -xvf elasticsearch-5.4.0.tar.gz

然后使用下面的命令启动es。

1
./bin/elasticsearch.sh

启动正常的话,可以看到下面的日志。

1563861865798

然后我们通过<192.168.193.100:9200>可以看到下面的数据

1563861906696

如果想后台运行ES,加上-d参数即可。./bin/elasticsearch -d

安装Head插件

安装head插件,需要先安装nodejs。

使用node -v确认已安装nodejs。如果没有安装执行yum install nodejs来安装。

可能遇到的问题:没有可用软件包 nodejs。

解决:执行yum install epel-release;然后再安装nodejs。

使用淘宝的npm镜像cnpm

使用npm安装依赖有时会比较慢,我们可以使用淘宝的cnpm镜像。

执行下面的命令来安装:

1
npm install -g cnpm --registry=https://registry.npm.taobao.org

安装后,原来使用npm,现在使用cnpm即可。

安装grunt

1
cnpm install -g grunt-cli

确认一下版本,grunt --version

修改HEAD监听的地址

默认HEAD监听 localhost,修改Gruntfile.js,添加hostname

1
2
3
4
5
6
7
8
9
10
connect: {
server: {
options: {
hostname: '*',
port: 9100,
base: '.',
keepalive: true
}
}
}

既然是跨源访问ES,那么就要在HEAD里面指定ES服务器了,修改_site/app.js

1
2
3
4
5
6
7
8
9
init: function(parent) {
this._super();
this.prefs = services.Preferences.instance();
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.193.100:9200";
if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) {
// XHR request fails if the URL is not ending with a "/"
this.base_uri += "/";
}
...

进入HEAD目录,安装HEAD依赖包,执行cnpm install

启动head插件

使用grunt server来启动head插件,看到下面的内容就说明启动成功了。

1563931401940

head插件使用的端口是9100,记得在防火墙中添加进去。

然后我们浏览器访问http://192.168.193.100:9100/

1563932853421

ps:也可以通过npm run start 来启动,npm run start &后台启动。

停止head插件

查看 9100 (head 端口)端口:lsof -i:9100

杀死进程:kill -9 pid

es集群状态的说明

green:每个索引的primary shard和replica shard都是active状态的。

yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态。

red:不是所有索引的primary shard都是active状态的,部分索引有数据丢失了。

安装kafka

这里使用的目前最新的版本,从http://kafka.apache.org/downloads下载。

解压缩,得到目录kafka_2.11-2.3.0。

修改配置文件/config/server.properties

1
listeners=PLAINTEXT://192.168.193.100:9092

启动kafka:

1
./kafka-server-start.sh ../config/server.properties

后台启动kafka:

1
./kafka-server-start.sh ../config/server.properties 1>/dev/null 2>&1 &

安装logstash

这里的logstash版本是5.4.0与es一致,从https://www.elastic.co/downloads/logstash下载相应的版本。

然后解压缩,进入config目录。

新建一个配置文件,名字随意,这里命名为test.conf。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
input {
kafka {
bootstrap_servers => "192.168.193.100:9092"
topics => ["app-log"]
group_id => "test-consumer-group"
codec => "json"
consumer_threads => 1
decorate_events => true
}
}

output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "test"
workers => 1
}
}

启动logstash

1
./bin/logstash -f config/test.conf

使用程序写入100条测试数据到Kafka

注意topic要与logstash中配置的一致。

这里使用logback的appender来将日志写入kafka,logstash从kafka接受,然后发送给es。

使用的github上的一个logback-kafka-appender依赖。

安装Kibana

https://www.elastic.co/downloads/kibana下载kibana,kibana要与es的版本一致,所以这里也下载5.4.0版本。

然后解压缩

最后使用./bin/kibana启动。kibana使用的端口号为5601,记得加入防火墙。

浏览器访问http://192.168.193.100:5601

1563935610542

在上面的logstash配置中,我们指定了es中的索引为test。所以在Kibana的Index name or pattern中输入test。然后点下面的Create。

然后再左侧可以看到刚刚配置的索引

1563951123917

点左侧的Discover菜单,然后就将右侧的时间选择为Today,可以看到日志了

1563951174193

kibana常用搜索

全文搜索

在搜索栏输入测试,返回所有字段中包含”测试”的文档(document)。

根据字段搜索

根据kibana左侧显示的field搜索。field:value

精确搜索:field:”value”

参考:https://blog.csdn.net/zhengchaooo/article/details/79500130

问题

可能会遇到下面的问题:

1.max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

解决:修改切换到root用户修改配置limits.conf 添加下面两行

命令:vi /etc/security/limits.conf

1
2
*        hard    nofile           65536
* soft nofile 65536

2.max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决:切换到root用户修改配置sysctl.conf

vi /etc/sysctl.conf

添加下面配置:

1
vm.max_map_count=655360

并执行命令:

1
sysctl -p

3.es启动成功,虚拟机中可以访问9200,但windows中无法访问。

首先确保防火墙关闭或添加了9200端口。

1
firewall-cmd --zone=public  --permanent --add-port=9200/tcp

另外, 修改es配置文件elasticsearch.yml,修改network.host和http.port

1
2
network.host: 0.0.0.0
http.port: 9200

然后重启es。

4.安装head插件遇到的问题

4.1 RunScriptError: post install error, please remove node_modules before retry!

重新执行安装命令,遇到npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression问题。

解决:参考https://www.cnblogs.com/shengulong/p/6224908.html,将package.json中的license值修改为Apache-2.0即可。

4.2 _Loading "Gruntfile.js" tasks...ERROR错误

解决:参考https://blog.csdn.net/wang_zhenwei/article/details/78389253

4.3 head插件启动成功后访问9100,没有列出ES的节点,F12打开Console,发现有跨域问题

解决:修改/ES_HOME/config/elasticsearch.yml,增加下面的配置

1
2
http.cors.enabled: true
http.cors.allow-origin: "*"

然后重启ES和head即可。

参考:https://blog.csdn.net/u012832088/article/details/80662241

5.kafka Connection to node -1 could not be established. Broker may not be available.

解决:参考https://blog.csdn.net/qq_40633152/article/details/81090306

参考

kibana中文文档:https://www.elastic.co/guide/cn/kibana/current/index.html

elasticsearch指南:https://www.elastic.co/guide/en/elasticsearch/reference/index.html

Donny wechat
欢迎关注我的个人公众号
打赏,是超越赞的一种表达。
Show comments from Gitment