计算机系统应用教程网站

网站首页 > 技术文章 正文

大数据日志分析平台之ELK环境搭建

btikc 2024-10-18 04:50:51 技术文章 13 ℃ 0 评论


这里纪录自学过程中ELK环境的搭建,方便自己以后参考,也给大家作参考。


部署架构

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


安装

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

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

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

然后解压缩

tar -xvf elasticsearch-5.4.0.tar.gz

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

./bin/elasticsearch.sh

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


然后我们通过http://yourip:9200可以看到下面的数据


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


安装Head插件

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

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

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

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


使用淘宝的npm镜像cnpm

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

执行下面的命令来安装:

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

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


安装grunt

cnpm install -g grunt-cli

确认一下版本,grunt --version。


修改HEAD监听的地址

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

connect: {
    server: {
        options: {
            hostname: '*',
            port: 9100,
            base: '.',
            keepalive: true
        }
    }
}

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

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插件,看到下面的内容就说明启动成功了。

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

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


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

listeners=PLAINTEXT://192.168.193.100:9092

启动kafka:

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

后台启动kafka:

./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。

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

./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


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

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

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


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

*        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

添加下面配置:

vm.max_map_count=655360

并执行命令:

sysctl -p

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

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

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

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

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,增加下面的配置

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


写在最后

注意:ELK各个版本之间安装和配置有区别。觉得文章有帮助的,麻烦点个关注,谢谢!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表