NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落

關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 153344

    累積人氣

  • 44

    今日人氣

    0

    訂閱人氣

Elasticsearch日誌蒐集分析系統x Linux Container(LXC) 實務應用by Navier

 
[LXC Container 組態/配置]


 實體主機 (lxc242)  Ubuntu 14.04 / amd64

 sudo apt-get install lxc   #安裝LXC









 
sudo man lxc-  + [tab]     #可以查看LXC支援相關指令 











當安裝好"LXC"後,檢視其提供安裝Container 系統安裝樣版(template)

下圖中可以看到 Centos,Fedora,debian....等樣版


ll  /usr/share/lxc/templates | grep cent*


其中我們可以使用 "lxc-download" 指定下載安裝系統版本

Example:  使用"lxc-create" 指定安裝 Ubuntu 12.04 x64 版本(代號: precise )

lxc-create -t download -n "Container名稱" -- -d ubuntu -r precise -a amd64 












 

「正式安裝本Container」Host Name:  ushost   #預設安裝ubuntu 14.04版本

 sudo lxc-creare -t  ubuntu -n  ushost   -d    # -d :背景啟動執行容器 ;  -n:容器名稱   ; t : 系統樣版

 注意下圖未加註 -d 背景執行參數,故建立完成後會佔用前景進入ushost 操作介面
 
 離開當前操作介面可輸入 [ctrl+a q] 即可跳出 Container 前景操作介面












方才已經建立一個Container 預設其資料/組態檔案是落在 /var/lib/lxc/"容器名稱" 路徑下

sudo tree - L 2 /var/lib/lxc  

框框圈起文字提醒:  方才安裝好的ushost  預設登入user 帳密 提示登入 "ubuntu/ubuntu"

#下圖中可以看見存在兩個容器, centos1 : centos 6 ver.(本lab前遇先建立)  及 方才建立 
 
 ushost(ubuntu ver.14) 容器
















 

LXC 克隆(Clone Container) 操作: 利用"lxc-clone" 可縮時建立Container(when大量部署時)

sudo lxc-clone -o ushost -n ushost2   # -o 指定克隆來源容器名稱 -n 定義Container新名稱

下圖中成功複製了Container: ushost2




















 


[刪除現存指定的Container] :  刪除方才Clone Container: ushost2

sudo  lxc-destroy -n ushost2  
 














Container:ushost  [ 移除預設登入帳戶:  ubuntu 配置]

預設配置"ubuntu" 這個使用者並無具備"sudo"權限,現計畫新增系統user: navier 授與"sudo"操作權限

建立OK 將預設
"ubuntu"使用者砍掉,

sudo lxc-start  -n ushost -d        

sudo lxc-attach -n  ushost  #使用"lxc-attach" 啟動容器"ushost"取得root權限

 sudo adduser navier                 #建立user:navier

 sudo adduser navier  sudo   #將navier 加入sudo群組授與sudo權限

說明: "navier"登入利用sudo deluser  ubuntu    #刪除預設使用者即可

 




 
 



 


登入Container ushost:  確認 navier 成功加入sudo群組





 

下圖中我們可看到ushost主機預設吃的網卡網段: 10.0.3.x/24 (NAT:可通internet) 

   #即是預設安裝LXC建立虛擬網卡










 
返還實體主機lxc242察看網路組態驗證: 
    
       預設建立好的Container 網卡主要是吃"lxbr0" 這張網卡: 網段是落在10.0.3.x

  (具DHCP分配IP功能),但稍後我們將ushost 網卡組態變更為Bridge實體網卡同一網段


         "192.168.11.x/24" 介接"br0"模式


      







[變更ushost 網卡組態為"bridge"]  即與實體網卡同一網段
確認系統有無安裝"bridge-utils" #若無請安裝









修改網卡組態參考如下

sudo vi /etc/netowork/interfaces

配置實體主機lxc242固定IP組態br0(配置eth0為其成員)

重新啟動網卡使其生效配置


sudo ifdown eth0

sudo  ifup  br0


















 

檢視br0啟動狀態:確認br0正常啟動
 



 




修改 Container 網卡組態:(先停止"lxc-stop -n ushost")

sudo vi /var/lib/lxc/ushost/config   #修改以下!!!

lxc.network.flags = up
lxc.network.link = br0

# service lxc restart    

下圖中lxc.netowrk.ipv4.gateway 忽略此配置LXC1.0.7版本無須指定此參數












重新啟動容器: ushost 

sudo lxc-start -n ushost -n 

sudo lxc-console -n ushost  
#使用console 連線ushost,基本上啟動時已可用ssh遠端連線登入容器管理


登入後我們一樣手動修改ushost 為static ip 配置 : 192.168.11.56/24 來測試

sudo vi  /etc/network/interfaces 

重新啟動ushost 網卡eth0 

sudo ifdown eht0  

sudo ifup eth0















測試Ping 通internet OK (Bridge Mode Success)
 












檢視Container 主機LIVE狀況(lxc-ls , lxc-info)

sudo lxc-info -n ushost   
#檢視資源配置/使用狀況state,memory use, blkio...etc

sudo lxc-ls -f ushost    





















[安裝LXC Web panel] 友善的調配LXC資源使用限制(安裝時請切換root身份安裝)

提供以下官網連接Then進行安裝(切換root身份執行)

wget http://lxc-webpanel.github.io/tools/install.sh -O - | bash















安裝完成請連線: http://192.168.11.56:5000/   #帳密 admin:admin 後台可自訂變更















 

LXC Web Panel 首頁 :
(A.)右上角分別有三個button  "建立,克隆,重新啟動" 容器動作 
   
(B.) 
中間區塊分別是實體主機"CPU Usage" , "Disk usage", "Memory usage"
 
(C.) 下方區塊List :可以列出方才我們提到兩個
Container ushost 與 centos1 

        在此我們可以
操作"start","stop" 或 暫停 "freeze" 動作,接者我們點選ushost 進階設定













關於ushost 一些basic 組態可以在此輕易變更修改(接者我們往下拉)


















Memory limit  or Swap limit  限制記憶體/置換記憶體上限配置,目前實體RAM為4GB

  CPUs: 要使用那個核心特定核心..等等 修改完成選擇"APPLY" 特用即可生效配置

        小結:  LXC Web Panel  是一套友善變更LXC Container/監控資源useage 工具
 















「Elasticsearch + logstash + kibana]  建置開始










實驗環境:

CentOS 6.6  HostName: elastic241  ;  DNS FQDN: elastic.neil0918u.com

[Quick Install]  套件請至  https://www.elastic.co/downloads  下載

elasticsearch:   rpm -ivh elasticsearch-1.5.0.noarch.rpm 

main config : /etc/elasticsearch/elasticsearch.yml    #Use  Port : *:9200

/etc/init.d/elasticsearch start 


[測試elasticsearch 運行OK] : dump 出底下資訊

curl -X GET http://localhost:9200 

chkconfig elasticsearch on 



----










logstash: rpm -ivh logstash-1.5.0-1.noarch.rpm

建立 logstash 與 log-forwarder(Client Agent) 傳輸log驗證Cert(憑證)

依我們主機為例:  elastic.neil0918u.com

cd /etc/pki/tls
openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt -subj /CN=elastic.neil0918u.com  *故產生憑證(Cert) 落在  /etc/pki/tls/certs/logstash-forwarder.crt  待會會將此檔案複製到 log-forwarder  (ushost)主機上存放(暫擱此step)  [編輯 lostash 組態]  vi /etc/logstash/conf.d/logstash_syslogs.conf    #修改憑證路徑,使用port-number:5050  
input {
lumberjack {
port => 5050
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
 
 
filter { #about 過濾Log規則
if [type] == "rsyslog" {
    grok {
      match => { "message" => "%{SYSLOGLINE}" }
    }
 
    date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
 
}
 
output { #about 輸出Log規則定義
 
elasticsearch { host => localhost index => "logstash-%{+YYYY.MM.dd}" }
stdout { codec => rubydebug }
}
 
















重新啟動logstash服務

/etc/ini.t.d/logstash restart

chkconfig logstasg on 


檢視logstash 是否正常啟動: 5050 up









kibana:  tar -zxvf kibana-4.0.2-linux-x64.tar.gz 

mv kibana-4.0.2-linux-x64  /usr/local/kibana 4   

#本人將kibana搬到/usr/local/kibana4底下執行

cd /usr/local/


main config:  default use *:5601 Port Number
vi kibana4/config/kibana.yml  去除 pid_file 註解存檔離開  下圖中可變更 Port:5661 , 倘若elasticsearch 在別他需指定正確url 








啟動 kibana : 編輯 init script

vi /etc/init.d/kibana4    
 #編寫範例如下,確定橘色字體,路徑指定正確
#! /bin/sh
# From The Logstash Book
# The original of this file can be found at: http://kibanabook.com/code/index.html
#
#
# Logstash Start/Stop kibana
#
# chkconfig: 345 99 99
# description: Logstash
# processname: kibana
 
name="kibana"
 
kibana_bin="/usr/local/kibana4/bin/kibana"
kibana_log="/usr/local/kibana4/logs/kibana.log"
 
kibana_bin_dir=`dirname ${kibana_bin}`
 
find_kibana_process () {
    PIDTEMP=`ps -ef | grep ${kibana_bin_dir}|grep $name |grep -v grep | awk '{ print $2 }'`
    # Pid not found
    if [ "x$PIDTEMP" = "x" ]; then
        PID=-1
    else
        PID=$PIDTEMP
    fi
}
 
start () {
    LOG_DIR=`dirname ${kibana_log}`
    if [ ! -d $LOG_DIR ]; then
      echo "Log dir ${LOG_DIR} doesn't exist. Creating"
      mkdir -p $LOG_DIR
    fi
    find_kibana_process
    if [ $PID -ne -1 ]; then
       echo "$name is already running!"
    else
          echo "Starting $name"
          nohup ${kibana_bin}   >> ${kibana_log} 2>&1 &
          echo "Done"
    fi
}
 
stop () {
    find_kibana_process
    if [ $PID -ne -1 ]; then
        echo "Stopping $name"
        kill $PID
    else
        echo "$name is not running yet"
    fi
}
 
case $1 in
start)
        start
        ;;
stop)
        stop
        exit 0
        ;;
reload)
        stop
        sleep 2
        start
        ;;
restart)
        stop
        sleep 2
        start
        ;;
status)
        find_kibana_process
        if [ $PID -gt 0 ]; then
          echo "kibana is running: $PID"
          exit 0
        else
          echo "kibana is not running"
          exit 1
        fi
        ;;
*)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        RETVAL=1
esac
exit 0

-------------------------

chmod +x kibana4 

chkconfig --add kibana4 

chkconfig  kibana4 on 

/etc/init.d/kibana4 start      
#啟動kibana 

#檢視kibana正確啟動無誤: 5601 up,kibana到目前組態已經告一段落

 
 









本Lab需要 Java version 支援 : 1..8.0以上即可







方才提到FQDN:elastic.neil0918u.com  #由於本lab 無配置DNS,故採內網hostname查詢配置

vi /etc/hosts  

#新增對應主機與IP對應記錄(稍後我們要為logstash與log-forwarder 傳輸建議必要憑證

192.168.11.241  elastic.neil0918u.com   #請在ushost 主機中/etc/hosts 也加入此筆記錄


[ Log Forwarder 安裝: ushost 主機組態]配置 

 sudo mkdir -p /etc/chunju/tls    #預先建立好存放lostash主機憑證資料夾


登入logstash主機後將稍早建立"憑證"SCP傳輸到 "ushot"  容器底下


scp  /etc/pki/tls/certs/logstash-forwarder.crt      rafael@192.168.11.56:~/
 








再遷移到方才建立好的資料夾  /etc/chunju/tls   

move
 logstash-forwarder.crt   /etc/chunju/tls

[ 安裝Log Forwarder  與組態配置」

sudo dpkg -i  logstash-forwarder_0.4.0_amd64.deb















 
編輯logstash組態檔案 

sudo vi /etc/logstash-forwarder.conf   參考以下
 
{
  "network": {
    "servers": [ "elastic.neil0918u.com:5050" ],               #配置elastic主機資訊
    "ssl ca": "/etc/chunju/tls/logstash-forwarder.crt",        #指定Cert正確路徑
    "timeout": 15
  },
   "files":[
    {
      "paths": [                                  #About log 傳輸的正確路徑
        "/var/log/syslog",
        "/var/log/auth.log"
      ],
 
      "fields": { "type": "rsyslog" }   #傳輸type指定rsyslog
     }
]
}


---------------

啟動 log-forwarder 與檢視服務啟動是否正常:

sudo /etc/init.d/log-/etc/init.d/logstash-forwarder restart

tail -f  /var/log/logstash-forwarder/logstash-forwarder.err  

#下圖訊息,我方已成功與.192.168.11.241:5050(elastic241) 連接成功(最底下訊息)

 ``trusted CA from file: /etc/pki/tls/certs/logstash-forwarder.crt"


 

 
 








Then 現在我們就可打開瀏覽器觀察kibana web ui 日誌蒐集分析

http://elastic.neil0918u.com:5601   "點圖可放大"

Kibana 提供友善視覺化顯示Log紀錄,方便系統管理員檢查事件

上方統計量可顯示某些時段Log產生量統計,而中下方分類每筆Log紀錄(簡化複雜Log結構)

亦可利用搜尋"bar"搜尋關鍵字Log資訊



  "點選其中一筆Event Log來檢視"

 
  紫色框框分解日誌結構-易簡化分析Log資訊

    左側: Message 下 "Quick Count " 可檢視資訊: 方才我們使用rafael 常態使用"sudo"指令動作

    來源:  ushost /var/log/auth.log   圖片往下拉繼續看
 











  [ message 稽核到以下,我們方才下過指令] :

user: navier  使用 sudo 檢視  logstash-forwarder.err 資料 

["Jun 30 19:09:41 ushost sudo: navier : TTY=pts/0 ; PWD=/home/navier ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/logstash-forwarder/logstash-forwarder.err"," navier : TTY=pts/0 ; PWD=/home/navier ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/logstash-forwarder/logstash-forwarder.err"]


ElasticSearch+Kibana+logstash  

架構介紹於此,本人仍在持續學習研究中,本Lab 介紹LXC與ElasticSearch日誌分析系統希望可協助在未來

工作上運維與雲集運算主機中更為有效使用


相簿設定
標籤設定
相簿狀態