CentOS7 上部署Elasticsearch,Fluentd and Kibana

来源:互联网 发布:js抛物线添加到购物车 编辑:程序博客网 时间:2024/06/05 10:23

Elasticsearch,Fluentd和Kibana(EFK)组合允许收集,索引,搜索和可视化日志数据(visualize log data)。是目前比较主流的日志中心化,可视化并提供索引,搜索,分析的开软软件组合。免费使用,只有当data volumes增加时可能需要一个收费license。

Elasticsearch是一个数据搜索引擎和分布式NoSQL数据库的组合,提过日志的存储和搜索功能。Fluentd是一个消息采集,转化,转发工具,目的是提供中心化的日志服务。Kibana是一个带有强大数据整理,分析的web前端,将数据以可视化的方式呈现给用户。

另一个流行的组合为Elasticsearch,Logstash和Kibana(ELK)。两种组合架构完全相同,Logstash和Fluentd的功能也大同小异,目标都是解决日志中心化的问题。但是两者的设计出发点稍有不同,造成在解决问题的优先级,重心上可能稍有不同。Logstash强调灵活性和互操作性,而Fluentd更倾向于简单和鲁棒性(Logstash emphasizes flexibility and interoperability whereas Fluentd prioritizes simplicity and robustness.)。两者的具体差异,以及Elasticsearch和Kibana改天另写一篇具体分析。本文主要介绍如何在CentOS7上搭建EFK。

数据流入下图所示:


1. 安装和配置Elasticsearch

1.1 安装java

Elasticsearch需要java支持,所以需要首先安装java。

sudo yum updatesudo yum install java

验证是否成功安装

[xingwangc@docker-reg ~]$ java -versionopenjdk version "1.8.0_65"OpenJDK Runtime Environment (build 1.8.0_65-b17)OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

1.2 安装Elasticsearch

wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.1.1/elasticsearch-2.1.1.rpmrpm -ivh elasticsearch-2.1.1.rpm

1.3 Securing Elasticsearch

从版本1.2开始,Elasticsearch默认使能了动态脚本能力,由于我们使用Kibana Dashboard供外网访问,所以在/etc/elasticsearch/elasticsearch.yml中增加如下行禁能动态脚本。

script.disable_dynamic: true

1.4 启动Elasticsearch

sudo service elasticsearch start

1.5 设置iptables规则

Elasticsearch默认监听9200端口,如果想要外部ip也可以访问到Elasticsearch,则需要设置iptables规则开发9200端口。

sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 9200:9400 -j ACCEPT

1.6 设置开机自动启动Elasticsearch

sudo systemctl enable elasticsearch

2. 安装和配置Kibana

2.1 安装Kibana

curl -L https://download.elastic.co/kibana/kibana/kabana-4.3.1-linux-x64.tar.gz | tar xzf -sudo cp -r kibana-4.3.1 /usr/share/

2.2 设置iptables规则

Kibana默认监听5601端口,如果想要外部ip直接访问Kibana,则需要开放5601端口。

sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 5601 -j ACCEPT

由于我使用的nginx作为代理服务器,所以可以此处可以不用开放5601端口。

2.3 配置Kibana

有两处需要配置,一是需要Kibana读取Elasticsearch的数据,所以需要配置告诉Kibana Elasticsearch的链接地址。二是我使用了nginx作为代理服务器,所以只希望本地的端口转发到达,或在本机直接访问,而不希望其他机器直接访问Kibana,所以将配置文件中“server.host”项设置为localhost。本例中,配置文件为/usr/share/kibana-4.3.1/config/kibana.yml。实际安装中,根据拷贝的的路径,版本区别路径可能有不同。修改后的文件截图为:


2.4 启动Kibana

$ sudo nohup /usr/share/kibana-4.3.1/bin/kibana &

3. 安装和配置Nginx

Nginx作为代理服务器允许外网访问Dashboard,并提供登陆验证,以及SSL验证机制。本实例并未详细说明登陆验证,以及SSL验证机制,具体方法可以参考上一篇《CentOS7上搭建私有的Docker Registry》中相应部分。

3.1 安装Nginx

首先在/etc/yum.repos.d/目录下创建Nginx源文件,并复制粘贴以下内容:

[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1

安装Nginx

sudo yum updatesudo yum install nginx

3.2 配置Nginx为Kibana提供代理

检查nginx配置文件/etc/nginx/nginx.conf,是否include /etc/nginx/conf.d/目录下的所有配置文件。

    include /etc/nginx/conf.d/*.conf;}

在/etc/nginx/conf.d/目录下创建kibana.conf文件,或者修改default.conf文件为如下内容:

server {    listen 80;    server_name example.com;    location / {        proxy_pass http://localhost:5601;        proxy_http_version 1.1;        proxy_set_header Upgrade $http_upgrade;        proxy_set_header Connection 'upgrade';        proxy_set_header Host $host;        proxy_cache_bypass $http_upgrade;    }}

重启nginx service

$ sudo service nginx restart

3.3 Disable selinux

保证Nginx监听的80端口能成功代理到Kibana监听的5601端口,需要disable selinux。

 /etc/sysconfig/selinux

否则需要执行下面命令保证Kibana可以正常被访问到:

sudo setsebool -P httpd_can_network_connect 1

3.4 开启80端口

<span style="font-family:Helvetica Neue;">sudo iptables -A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT</span>

为确保外部IP能够访问到Nginx,必须设定iptables规则,对80端口上的traffic放行。到此即已经可以通过外网IP通过Nginx代理访问到Kibana了。

4. 安装和配置fluentd

4.1 安装fluentd,使用td-agent版本

<span style="font-size:14px;">curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh</span>

如果安装没反应,可能是在执行rpm --import key的时候造成的无法import key,直接下载“install-redhat-td-agent2.sh”到本地,并在脚本中找到key的链接,有浏览器打开key,在local创建key文件,并复制粘贴key的内容,修改脚本文件,直接从local import key

4.2 安装插件

(1)out_elasticsearch:为fluentd序列号数据提供给Elasticsearch

(2)outrecordreformer:将数据处理成更有用的格式

如下命令同时安装两个插件,out_elasticsearch依赖make和libcurl,所以需要首先安装这两个package。
sudo apt-get install make libcurlsudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-map(没有这一步,后面两个好像无法安装,报“ Could not find a valid gem”)sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearchsudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-record-reformer

4.3 配置fluentd监听syslog消息并转发Elasticsearch

打开/etc/td-agent/td-agent.conf,并将如下内容拷贝到文件头:
<source> type syslog port 5140 tag  system</source><match system.*.*> type record_reformer tag elasticsearch facility ${tag_parts[1]} severity ${tag_parts[2]}</match><match elasticsearch> type copy <store>   type stdout </store> <store> type elasticsearch logstash_format true flush_interval 5s #debug </store></match>

4.4 启动fluentd

sudo service td-agent start

5. 转发rsyslog到fluentd

重新配置转发rsyslog events到Fluentd监听的端口 (以端口5140为例)。打开/etc/rsyslog.conf文件并将下行添加到文件头:
*.* @127.0.0.1:5140
重启rsyslogd daemon进程

sudo service rsyslog restart

参考链接:

Digitalocean:How To Install Elasticsearch, Logstash, and Kibana(ELK Stack) on CentOS 7)

Digitalocean:Elasticsearch, Fluentd, and Kibana: Open Source Log Search and Visualization


0 0