[ELK Stack]利用logstash,elsticsearch與kibana來分析log

前言: 本來只是跟幾個前同事聊天的時候聽到這個軟體,並沒有在意.結果之後就偶然有機會用的到.本來覺得還蠻複雜的,但是看完以下這篇影片好像就簡單多了. https://www.youtube.com/watch?v=Kqs7UcCJqu 簡單的說: logstash: 幫助你去收集各地的log或是資訊~並且根據你的格式,轉換成各種資料欄位. elasticsearch: 根據各種搜尋欄位來尋找資料. kibana: 視覺與圖形化的表示方式來顯示各種log,並且透過這個工具可以幫助你回答許多商業上的問題.比如說: 大部份使用者用那種裝置登入網頁?由哪個國家來?類似這些的問題. 接下來就打算要好好的研究一下,如何使用這套強大的工具. 安裝與執行: 安裝上其實間單到個不行,所以不太需要敘述.唯一需要談的是要記得裝 Openjdk-7-jre . 在執行Kibana的時候,我自己會一直出現連不到elasticsearch.後來我的解決方法是.先連一個不能連的位置.然後再連一次~就莫名其妙好了. Logstash 的簡單介紹: Logstash實在是一個功能很強大的工具,它主要能做的事情有: [抓取]由各種地方抓取相關的資料,不論是標準輸入(stdin),檔案或是監聽一個連線都可以.並且可以把不同的資料來區隔開來作為之後用途. [篩選]抓取到資料之後,這時候可以選擇使用grok去拆解資料.比如說把一串非常長但是沒人看得懂的log拆解成各個相對應得資料欄位. [輸出]可以輸出到各種地方,不論是輸出到stdout印出來,或是直接丟給Elasticsearch拿來做分析用甚至可以直接輸出到資料庫. Elasticsearch的簡單介紹 Elasticsearch是一個很有用處的資料搜尋引擎.只要能把資料餵給他(沒有限制是logstash的),你就可以下參數去搜尋需要的資料.並且他會吐出相關的JSON回復.預設的連接埠是9200. 並且Elasticsarch支援RESTful的API,所以其實有很多的類似的extension 或是 plugin可以使用. 如果一直把資料餵給他,是可以把它當資料庫使用. Kibaba的簡單介紹 Kibana連接著Elasticsearch之後能夠去搜尋與分析資料,並且把分析的資料用圖像的方式來表現.可以記住許多的分析參數來作為BI的用途. 關於Logstash的進階使用 grok是一個強大的工具,可以免去你使用regular expression 的痛苦,不過它的語法還是需要習慣.它的用途主要是可以把一串長長的字串翻譯成你看得懂的JSON格式.不過前提是你得把資料格式敘述好~讓他知道如何對應. grok debugger 是一個好工具可以幫助你來找出你需要的match pattern. https://grokdebug.herokuapp.com/ 使用流程如下: 先把你的Log RAW Data放到Discover的地方,可以幫你找出一些可能的pattern 不然可以到Pattern去查查看常用到的pattern有哪些 建立好基本的pattern之後,拿到Debugger那邊去一步步把它全部翻譯出來. 一些心得分享: grok 的格式其實沒那麼鬆散,前面的資料還是得清楚敘述,連空格都不能少.後面可以用GREEDYDATA一起收下來. 如果要做出 A or B的match需要使用以下的句子 **(?:A B)** 要查詢已經建立好的grok pattern可以去這裡查詢 https://github.com/elasticsearch/logstash/blob/master/patterns/grok-patterns 結論 ELK Stack (Elasticsearch + Logstash + Kibana)可以幫你解決一些問題如下: 太長的Log卻沒有一個方法可以整理跟分析它 太多來源的log,每次查詢一個問題需要打開三四個檔案,但是往往還是不知道原因.得要人工去查詢. 想要透過系統的log去做一些商業智慧(BI)的分析,但是又無從下手. 我覺得這套系統相當的簡單而易學,重點是也容易架設.我想可以作為伺服器要使用得時候,這個是必須要有的. 參考資料 Logstash 相關: Logstash Book http://logstashbook.com/ Elasticsearch 相關 初探Elasticsarch http://ingramchen.io/blog/2014/06/elasticsearch.html Slide: ELasticsearch 實戰介紹 http://www.slideshare.net/gugod/elasticsearch-19877436 Logstash + Elasticsearch + Kibana 綜合簡介 這篇蠻實用的 http://www.slideshare.net/AmazeeAG/2014-0422-loggingwithlogstashbastianwidmercampusbern?qid=efe9afba-8831-4054-a290-d25183de38f2&v=qf1&b=&from_search=1 蠻多基礎介紹 http://www.slideshare.net/ae_bm/logstash-elasticsearch-kibana?qid=efe9afba-8831-4054-a290-d25183de38f2&v=qf1&b=&from_search=2 對於三個工具的角色有一些介紹 http://www.slideshare.net/nickchappell/pdx-devops-logstash-intro?next_slideshow=1
繼續閱讀

[Jekyll]從Wordpress搬家到github pages

前言: 最近買了一台Synology NAS(DS213J)回來用,本來是打算在上面架設部落格跟相簿.不過使用過一下之後,發現Synology的限制很多.不僅內建Wordpress有許多的問題.更難去設定domain name.加上最近寫部落格覺得使用HTML越來越礙眼.可能跟一直使用Github也是有關係的. 所以決定把所有的相簿語部落格全部轉到免費的地方. 相簿轉到 Flickr去,順便做異地備份.不過會把所有之前的資料寫進EXIF.這也是前幾天在忙的事情,應該過兩天會整理一篇文章. 部落格轉到Github Page去,其實已經很多大大都是這麼做的,我也很想做很久. 最後,家裡的NAS應該會躲在防火牆的後面.專心的儲存檔案. 接下來就會稍微提到,我這幾天在弄Jekyll 與 Hugo的心得. Hugo系統的安裝 Hugo 的安裝其實沒有遇到太大的問題.唯一的問題就是沒有比較好用的Wordpress導入的工具.大部份都是從Jekyll轉過來,所以決定先弄弄Jekyll . 關於Jekyll的導入: 關於架設Jekyll其實相當簡單,主要就是卡在Ruby架設跟Ruby Gem的安裝 這裡我重新安裝兩次的Ruby跟Ruby Gem才能順利跑到比較正確的版本安裝. 要啟動Jekyll 主要就是靠 Jekyll Bootstarp. 其實Git Clone下來後稍微修改_config.yaml就可以直接使用. 關於Jekyll 導入有很多的方向可以走: 使用 Jekyll-import 這邊使用上沒有太大問題,除了文章會變成亂碼的檔案名稱外.再來就是類別沒有輸出. 大失敗. 使用Wordpress Jekyll Exporter 這邊是使用Wordpress的插件來使用,不過我的PHP使用的是5.26 (AppServ 2.5.10),但是這個插件是使用PHP5.3之後的namespace功能. 最後找到ExutWp雖然也有檔案名稱亂掉的問題,但是有輸出類別. 但是圖片就不會抓下來,這倒是有點可惜.不過比起圖片來說,類別不見我比較累啊. 最後總算成功了,也成功的導入到[Github Page] (http://kkdai.github.com).搞了兩天再裝系統,卻真正只用到Jekyll不到兩個小時的時間.當然扣除掉我的部落格一千多篇文章的轉檔. 最後還需要把Domain Name轉到Github去,可以參考這篇文章. 增加一個檔案是CNAME到Github的目錄下,內容是你的網址.(舉例: example.com) 上傳到Github後,稍等一下就會轉址. 也要去DNS Server設定的地方去改 CNAME來指向你的位址,然後就是等待啦. 打完收工…. 參考文章: 關於Markdown 關於Markdown的工具 在Sublime Text 上面編輯Markdown,不過我發現中文會有bug 另外一篇介紹 關於Jekyll導入有關的 Wordpress 去 Octopress(要改) XDite大大的導入文章 WordPress to Jekyll Exporter Jekyll Importer 關於Jekyll 設定 如何使用Pygment 也是Pygment這一篇清楚一點,也有比較多例子 Jekyll bootstap 這個一定要用
繼續閱讀

[MOOC][Java][Programming Cloud Service] 額外學習 NoSQL,GAE與更多其它

主要的作業都做完了,不過接下來都是選修的部分.但是課程可是一點都不馬虎,又有mongoDB,又有GAE還有其他的部分.都是很值得學習的部分. 筆記: 關於MongoDB的設定 如果要使用local mongodb 一切都比想像中的簡單的多 不需要帳號,與密碼 建立mongoDB 與執行 brew mongodb sudo mongd 在Spring 裡面鏈結 add application.properties spring.data.mongodb.host=127.0.0.1 spring.data.mongodb.port=27017 這樣就可以了… 其他都不用改 想要檢查是否有存取的話 mongo use test db.video.find() 在原來的Spring 加入MongoDB support 使用MongoRepository 換掉 VideoRepository Gradle 增加: compile(“org.springframework.boot:spring-boot-starter-data-mongodb”) 就這麼簡單,不過預設會寫到 Database: test Collection: Video 如果要使用自己定義的資料庫名字(database name),需要增加以下的code (參考這裡) class ApplicationConfig extends AbstractMongoConfiguration { @Override protected String getDatabaseName() { return "moocs"; } @Override public Mongo mongo() throws Exception { return new Mongo(); } @Override protected String getMappingBasePackage() { return"com.oreilly.springdata.mongodb"; } } 參考: Spring Document Spring getting start with MongoDB https://spring.io/guides/gs/accessing-data-mongodb/ Access MongoDB with REST https://spring.io/guides/gs/accessing-mongodb-data-rest/ http://docs.spring.io/spring-data/data-mongo/docs/current/reference/html/mongo.repositories.html JPA Repositories http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html
繼續閱讀

[MOOC][Java][Programming Cloud Service] 筆記與第二次作業

前言: 這些學習主要都是針對Mooc 上面的課程(Programming Cloud Service)所學到的一些部分.  心得: 第二個作業不確定是不是最後的作業,但是卻相當的有趣.主要是透過架設OAuth2 的Server 然後去搭配測試程式的Client來做Video是否有喜歡 (like)的操作. 裡面幾個邏輯都算是很簡單,比如說Video不能被同一個使用者喜歡兩次. 喜歡的Video是必須存在的…. 主要的難度,還是在跟Https 與 OAuth2的部分,不過由於我有習慣從第一個範例開始就寫同一個程式然後慢慢去改~慢慢學習裡面的幾個比較奧妙的地方. 所以這次的作業反而相當快就寫完了. 很值得修的課程,對於 HTTPS, OAUTH都有相當清楚地介紹,想要了解透過Exclipse去架設Java Server (不論是 Jetty 或是 Tomcat)這都是好選擇. 當然如果你對於Eclipse上面Gradle不太熟,這個也可以告訴你怎麼學習啊~~因為我也卡了很久.主要就是每次加了新component 之後都忘記要 Gradle->Refresh. 最後提一下學這堂課的動機吧,第一個部分是希望好好把Cloud Programming 有系統地學一下,雖然說懂 JSON,REST跟 OAuth.但是詳細的原理跟真正在Java (畢竟JSON是Java出來的)上要如何實現才能真正的了解;另外一個原因就是因為我一直以來對於Java與使用Eclipse有一種排斥感(雖然我修過Scala),但是我希望透過這個學習會讓我更熟悉這些部分. 我學習的Github 在這裏    課堂筆記: @ComponentScan 會搜尋指定範圍的原件,是會重啟Spring.除了一些PaaS可能會踢掉之外(GAE?),一般而言並不會造成任何效能上的影響. @Autowired 對應著Application.java 的一個@Bean/@Component/@Service/@Repository,可以讓他根據不同狀況來改變injection 不同的class. 如果沒有@Bean在Application 會產生exception. 使用上可以類似C++的繼承方式,使用 @Autowired 在一個parent class上.然後利用@Bean 或其他的方式來mapping 到你需要的child class來改變或是更換你需要的物件. Java Persistence API @Entity @Respository 需要做以下的事情 需要在Grandle 先加上以下的資訊 compile(“org.springframework.boot:spring-boot-starter-data-jpa:${springBootVersion}”)        compile(“jdbc:jdbc:2.0”)     compile(“com.h2database:h2”)     如果要連接一些資料庫,也需要在application.properties裡面設定好 spring.datasource.url=jdbc:mysql://localhost/test spring.datasource.username=dbuser spring.datasource.password=dbpass spring.datasource.driverClassName=com.mysql.jdbc.Driver About Data REST 要把整個Spring 從controller 改成由這個改變) Application 繼承RepositoryRestMvcConfiguration Gradle 要加入compile(“org.springframework.data:spring-data-rest-webmvc”) 整個Controller 不再需要,直接移除後開始使用 VideoRepository 修改 VideoRepository 傳回與接收直,注意以下事項: (參考另外一個改變) findByXXX 必須回傳 Collection 不然就會錯誤< addVideo 不回傳 重要的是必須要 ObjectMapper弄好~不然傳回HATEOS就沒辦法直接使用/li> Spring Security 增加一些安全性的保護(登入機制)並且利用加密的cookie來辨別身份,並且可以根據使用者權限來決定可以執行的REST指令或是要求. 要加上https的支援,必須要做以下的修改: 加入mainresourcesprivatekeystone (如何產生看這裡) 要把Jetty 改成用tomcat compile(“org.springframework.boot:spring-boot-starter-web:${springBootVersion}”)     compile(“org.springframework.boot:spring-boot-starter-tomcat:${springBootVersion}”) 必須在Application 加入以下的東西 @Bean EmbeddedServletContainerCustomizer containerCustomizer() 千萬記住在test那邊要把網址改成 https://localhost:8443/ 而且在properties 裡面設定的 SERVER_PORT=9000 也沒有效果 要加上login redirection 需要完成以下的修改: (參考以下修改  ) Add in build.gradle     compile(“org.springframework.boot:spring-boot-starter-security:${springBootVersion}”) 需要新增一個class 繼承  WebSecurityConfigurerAdapter 來處理帳號與login/logout的問題與設定. 必須要加上以下兩個設定,不然啟動的時候會有問題 @Configuration// Setup Spring Security to intercept incoming requests to the Controllers @EnableWebSecurity 在unit test的時候,需要注意以下的部分: 根據目前的設定,任何的method都需要登入才能執行....
繼續閱讀

[研討會心得] PaaS Meetup #3 MSFT Azure/ IBM BlueMix

心得: MSFT Azure 在宣傳資料上面,似乎數據相當的嚇人.之前使用的經驗上還算不錯. PaaS服務其實挺多的,只是支援語言有點少.可能要使用還是以IaaS為主. IBM BlueMix 網路的服務其實很不錯 (hub.jazz.net) 甚至有IOT的SDK,這是比較有競爭力的地方. 不過使用狀況上不算快,可能是台灣的網路都不快,看IBM哪時候把骨幹加強. 有一些免費的quata 其實可以去使用,只是速度堪慮. IOT目前不收費,可能是比較有趣的地方. 速記: MSFT Azure 講者: Cacafly  James Jan Cacafly FB 台灣廣告總代理 Azure 台灣代理 Media Service:  Streaming broadcasting. Support: VOD DRM (PlayReady) Live Streaming 線上轉檔 上傳媒體檔案後,鏈結會根據平台的不同連上不同的streaming. (HLS……) 參考: http://msdn.microsoft.com/en-us/library/azure/hh973629.aspx#get_started http://azure.microsoft.com/en-us/documentation/articles/media-services-set-up-computer/ PaaS: Github sync  Once it link, any commit in github will push to Azure directly. Language support: PHP/.NET/nodeJS  直接用挑選的方式 參考: PHP configurare in Azure http://azure.microsoft.com/zh-tw/documentation/articles/web-sites-php-configure/  Mobile Services: 可以挑選平台 (iOS/Android/ Windows Store) 然後下載範例程式碼.(類似 Parse) 參考: http://azure.microsoft.com/zh-tw/documentation/articles/web-sites-php-configure/ iOS http://azure.microsoft.com/en-us/documentation/articles/mobile-services-ios-get-started/ Machine Learning 有支援R Language ,也有 Hadoop 可以使用. 參考: http://azure.microsoft.com/en-us/trial/get-started-machine-learning/ IBM BlueMix 講者:  Joseph Chang 原本做: http://www-01.ibm.com/software/tw/rational/ Bluemix 的網址:  http://www.bluemix.net      Slide: http://www.slideshare.net/JosephChang8/ibm-blue-mix-introduction Hackpad: https://paas-tw.hackpad.com/IBM-Bluemix-Introduction-o6WbKTL07n3 基於CloudFoundry 但是IBM 有加強許多的功能.細節可以到Hackpad 去看 IOT: 支援 NoSQL 的SDK在許多IOT device (RPI, ARM…) 參考: https://developer.ibm.com/iot/ Big Data 參考: http://www.ng.bluemix.net/docs/#services/AnalyticsWarehouse/index.html#AnalyticsWarehouse Mobile Service SDK 參考: https://www.ng.bluemix.net/docs/#services/mas/index.html#gettingstarted Boilerplates (Web App Server + DB)  可以快速的建立server 加上資料庫. 第一次建立與瀏覽的時候才會去建置. 參考:https://www.ng.bluemix.net/docs/#starters/javaDB/index.html#javawebdatabase 優點: 提供file structure 可以直接去瀏覽PaaS container 的檔案架構. 網路的編輯平台 Git migration (Cloud Foundry並沒有)   IBM Git Server not github.  (hub.jazz.net) 可以線上編輯,並且直接在線上去commit與build也可以直接線上deploy...
繼續閱讀

[研討會心得] PaaS Meetup #2 AWS Docker

前言: 就像上次有提到的,這個meetup主要是由IBM的 BlueMix團隊的人主辦的. 但是相當有趣的是主要是來研究各種不同的PaaS的部分.這是第二次參加主講的部分是AWS與 Docker 心得: 第一部分:   AWS 的部分很有趣,也開了AWS的帳號.發現建立一個Beantalk 相當的方便. 這次在Coscup裡面也有聽到其實AWS裡面有相當大的一個DevOps的一系列工具.不僅僅能當PaaS連,IaaS都有類似的功能. CLI的操作起來也是學習Heroku,這部分久不需要詳談.這次參加也發現 AWS Beanstalk 其實有支援docker了. 第二部分: 這個部分的講解相當的Cool,主要是利用 Dokku 來架設一個lightweight 的 Heroku在 DigitalOcean上面. 在這裡面docker是為了讓dokku能夠跑出類似heroku的不同dyno 的功能, 類似這樣應用其實挺有趣的,也不斷的思考有沒有什麼特別的應用可以來用. AWS (Amazon Web Service)  Beanstalk  (slide) 主講人:  Moogoo QLL Engineer using Cornora SDK Amazone Web Service architecture: http://www.trisys.co.uk/support/documents/AWS/Web%20Application%20Hosting.jpg 優點: 快速部署,方便管理 整合AWS服務 EC2 (運算) S3 (File storage) SNS (message queuing) Cloud Watch  Elastic Load balance Auto Scaling 比較一下: Elastic Beanstalk Application container OpsWorks 利用 shelf 的部署檔,可以把各個主機部署的狀況寫成部署檔來掌控 Similar with puppet? http://puppetlabs.com/ Compare with Puppet and OpsWorkhttp://www.scriptrock.com/articles/opsworks-vs-puppet Could Formation Template-driven provisioning Deployment working flow: Create Application -> Upload version -> launch Environment -> manage Environment Deployment command line toolkit (refer here) Demo (Python -> AWS EB with Flask) Local run Implement Application.py (for Flask) Add Requirement.txt (similar with heroku virtualenv -> pip freeze ) init Git Tools : git aws.push eb start Server type  LoadBalance RDS (Relation Database ) eb stop (to kill application) 注意: 如果EB 移除的時候,該DB 也會一起被移除....
繼續閱讀