CentOS7 上部署Elasticsearch,Fluentd and Kibana

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 update
sudo yum install java

驗證是否成功安裝

[xingwangc@docker-reg ~]$ java -version
openjdk 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.rpm

rpm -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 repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

安裝Nginx

sudo yum update
sudo 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 libcurl
sudo /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-elasticsearch
sudo /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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章