Docker容器與虛擬化技術——容器日誌實戰

                                                          容器日誌實戰

一、容器日誌摘要
通常Docker的日誌信息存儲在計算機本地,當在分佈式環境當中,日誌會被分散到不同的服務器,導致日誌查閱繁瑣及效率低下,最好的辦法就是集中化的日誌管理方式。使用rsyslog可以將所有服務器上的Docker日誌手機彙總到一臺服務器上統一管理。

二、常見日誌手機方式
1、基於rsyslog的日誌收集方案
    Linux系統通常使用rsyslog來實現系統日誌的集中管理(6.0版本之前爲syslog),採用服務器端和客戶端的模式。客戶端只需要在本地syslog服務配置中添加日誌服務器端的IP和端口號(514)就可以將日誌發送到日誌服務器。
(1)日誌收集服務器(syslog-server)
①在配置文件/etc/rsyslog.conf中啓用TCP/UDP端口,用於接收遠程日誌客戶端傳送過來的日誌信息

②定義日誌模板並用於遠程日誌,將遠程主機上傳輸的日誌單獨存放
$template RemoteLogs,"/var/log/%FROMHOST-IP%.log"
*.* ?RemoteLogs
& ~
(2)發送日誌服務器(syslog-client)
vim /etc/rsyslog.conf
*.* @@192.168.11.50:514
*.* @192.168.11.50:514
*.* @(z9)192.168.11.50:514
(3)收集docker容器日誌到日誌服務器中
docker容器日誌默認是json-file日誌驅動程序,需修改默認日誌驅動
①全局修改
/etc/docker/daemon.json
{
    "log-driver": "syslog"
}
②某個容器修改
docker run -itd  --log-driver syslog daocloud.io/nginx
(4)配置Docker的log-driver直接把日誌發送到遠端
①取消rsyslog配置文件中的轉發選項
②配置Docker全局變量(如docker無法啓動,將後綴json修改爲conf)
/etc/docker/daemon.json
{
    "log-driver": "syslog"
    " log-opt syslog-address" : tcp://192.168.11.243:514
}
③或者運行容器時添加選項
docker run -d -p 8080:80 --log-driver syslog --log-opt syslog-address=tcp://localhost:514 --log-opt tag="nginx" --name nginx nginx
2、Logstash日誌收集方案
(1)安裝JDK環境
tar zxf jdk-8u91-linux-x64.tar.gz
mv jdk1.8.0_91 /usr/local/java
vim /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
source /etc/profile
(2)安裝Logstash
tar xf logstash-5.2.2.tar.gz -C /usr/local/
ln -s /usr/local/logstash-5.2.2/bin/* /usr/local/bin/
(3)配置Logstash
vim /usr/local/logstash-5.2.2/bin/logstash.conf
input {
        file {
                path => "/data/log/slave1/dockerd-current.log"
        }
}

output {
        stdout {
                codec => rubydebug              //輸出到屏幕
        }
}
(4)測試

(5)一般使用rsyslog收集系統日誌,logstash收集日誌,兩者配合,解析後的數據可以寫入Elasticsearche/Kafka/MQ等等。


三、基於ELK的日誌分析/存儲/展示
1、ELK簡介
ELK是一套完整的日誌解決方案,由ElasticSearch、Logstash、Kibana三款開源軟件組成。ElasticSearch是基於Lucene開發的憤怒時存儲檢索引擎,用來存儲各類日誌;Logstash對日誌進行收集、分析愛,並將其存儲供以後使用;Kibana是基於Node.js開發的展示工具,爲前者提供用於日誌展示的Web界面。
2、ELK單ElasticSearche平臺部署
(1)安裝ElasticSearch
tar xf elasticsearch-5.2.2.tar.gz -C /usr/local/
(2)修改配置文件
vim /usr/local/elasticsearch-5.2.2/config/elasticsearch.yml
network.host: 192.168.11.50
(3)直接啓動會報錯,elasticsearch不允許用root用戶啓動
useradd elas
chown -R elas /usr/local/elasticsearch-5.2.2/
vim /etc/security/limits.conf
    * hard nofile 65536
    * soft nofile 65536
vi /etc/sysctl.conf
    vm.max_map_count=655360
sysctl -p
(4)切換到用戶elas進行啓動
nohup /usr/local/elasticsearch-5.2.2/bin/elasticsearch &>/dev/null &
(5)配置好之後可以瀏覽器登錄192.168.11.50:9200查看軟件版本
(6)創建logstash的配置文件,並啓動logstash
vim /usr/local/logstash-5.2.2/bin/logstash-test.conf
input {
        file {
                path => "/data/log/slave1/dockerd-current.log"
        }
}

output {
        elasticsearch{
                hosts => "192.168.11.50"
        }
}
(7)訪問測試
url 'http://192.168.100.14:9200/_search?pretty'
3、Kibana部署
(1)tar xf kibana-5.2.2-linux-x86_64.tar.gz -C /usr/local/
(2)修改配置文件
elasticsearch.url: "http://192.168.100.14:9200"
(3)啓動kibana
/usr/local/kibana-5.2.2-linux-x86_64/bin/kibana
4、填坑
(1)如果ElasticSearch與logstash安裝在同一機器,如果內存不足將導致ElasticSearch被kill掉
(2)在日誌未生成前,kibana可能無法創建索引(沒有create鍵)

 

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