[กันลืม] Elasticsearch API พื้นฐาน

INDEX วิธีดูว่ามี index อะไรบ้าง GET /_cat Response เมื่อทราบว่ามี index อะไรบ้าง ต้องการดูรายละเอียด ใส่ query string parameter (qrs) “v”‘ GET /_cat/indices?v Response ต้องการทราบว่า แต่ละ Fields มีความหมายอย่างไร ใช้ qrs ‘help’ GET /_cat/indices?help Response ต้องการแสดงเฉพาะบาง Fields ใช้ qrs ‘h=’ GET /_cat/indices?h=idx,dc,ss&v Response ต้องการดูขนาดจัดเก็บ ใช้ qrs ‘bytes=’ GET /_cat/indices?h=idx,dc,ss&bytes=b&v Response ต้องการเรียงลำดับ ใช้ qrs ‘s=’ และ สามารถกำกับ ‘:desc’, ‘:asc’ GET /_cat/indices?h=idx,dc,ss&bytes=b&s=ss:desc&v ลบ INDEX DELETE /kx01 DOCUMENTS Document เป็น JSON ที่มีรายละเอียดเกี่ยวกับการสร้างขึ้นมา เช่น _id, _version และ _source ซึ่ง source หรือ (stored fields) create / update if exist โดยใน Index เดียวกับ เก็บ Document คนละ Schema กันก็ได้ Check if exist HEAD /kx01/_doc/1/ Response 200 – OK get a source (stored fields) GET /kx01/_doc/1/ Response get only document value GET /kx01/_source/1/ Response อื่น ๆ Source filtering source_include source_exclude

Read More »

การเชื่อมต่อ Dell EMC SC Series (SAN Storage) กับ Windows 2019 ด้วย iSCSI Microsoft MPIO

ทำไมต้องเชื่อมต่อ SAN Storage ด้วย MPIO มีข้อดีอย่างไร ต้องตั้งค่าอย่างไรให้ถูกต้อง Reference : – https://www.youtube.com/watch?v=hsXtfab-xNM Dell EMC SC Series Storage : Microsoft Multipath I/0 (MPIO) Best Practice– https://downloads.dell.com/manuals/all-products/esuprt_software/esuprt_it_ops_datcentr_mgmt/general-solution-resources_white-papers3_en-us.pdf Dell EMC SC Series Storage and Microsoft Multipath I/O– https://www.youtube.com/watch?v=Z2ICF8yzFkU How-to: Configure iSCSI MPIO on Windows Server 2012 R2– https://www.starwindsoftware.com/blog/lacp-vs-mpio-on-windows-platform-which-one-is-better-in-terms-of-redundancy-and-speed-in-this-case-2 ISCSI: LACP vs. MPIO Environment : – Dell EMC SC5020 – Windows Server 2019 Standard Edition MPIO ย่อมาจาก Multipath Input/Output เป็น Feature ของการเชื่อมต่อไม่ว่าจะเป็น iSCSI หรือ Fiber Channel ที่ต้องการให้ Server ไม่สับสนเมื่อมีการคุยกับ Storage หลายเส้นทาง (Storage ต่อเน็ตหลายเส้น และ Server ก็ต่อเน็ตหลายเส้น รวมถึงมีหลาย IP ไม่ได้ทำแบบหลายเส้นรวมเป็น Link เดียว) ซึ่งถ้าไม่ใช้ความสามารถนี้ จะทำให้ Server เห็น Volume หรือ LUN บน Storage เป็นหลาย ๆ อันทั้งที่เป็นอันเดียวกัน นอกจากนี้ MPIO ยังสามารถทำ Load Balance โดยการกระจายการเชื่อมต่อโดยมีหลายวิธีให้เลือกใช้งานเช่น Round Robin (ไล่ลำดับไปเรื่อย ๆ แล้วกลับมาเริ่มที่ connection ที่ 1 เช่น 12341234) ยกตัวอย่างในกรณีไม่ได้ทำ MPIO ได้ดังรูป หลังจากทำ MPIO จะได้ดังรูป MPIO ไม่ได้ติดตั้งโดย Default บน Windows Server โดยสามารถติดตั้งได้จาก Server Manager GUI โดยการ Add Feature ดังรูป หรือติดตั้งผ่าน PowerShell ดังนี้ หลังจากติดตั้งเสร็จให้ Restart Server สำหรับ Dell EMC SC Series ต้องทำการแก้ไข Registry ของ Windows ด้วย PowerShell Script ดังนี้ หลังจากรัน Script PowerShell ให้ Restart Server อีกรอบ เพื่อให้เข้าใจง่ายขึ้นสามารถยกตัวอย่างการใช้งาน Multipath ได้ดัง Diagramในรูป ตัวอย่างการตั้งค่าใน SAN Storage (Dell SC5020) โดยจะมีทั้งหมด 2 Controller ซึ่งแต่ละ Controller จะมี 4 Port ซึ่งเมื่อตรวจสอบในฝั่ง Windows จะเห็นว่ามี Connection ที่เกิดจากการ Discovery โดยใส่ IP ของ ISCSI ปลายทาง จำนวน 8 Connection ซึ่งต้องเข้าไปตั้งค่าใน Target ให้มีการใช้งานแบบ multi-path ด้วยทุก Connection ซึ่งเราสามารถเลือกใน Advance ได้อีกว่าจะให้เชื่อมต่อไปยัง

Read More »

ELK #09 Anomaly Detection (Case Study)

ระบบ PSU Email ให้บริการผู้ใช้ของมหาวิทยาลัยสงขลานครินทร์ ซึ่งมีการใช้งานจากทั่วโลก ทั้งระบบประกอบขึ้นจากคอมพิวเตอร์หลายเครื่อง การจะตรวจสอบ Log เมื่อเกิด Incident ขึ้น อาจจะต้องใช้ระยะเวลานาน และเป็นการยากพอสมควรที่จะเชื่อมโยงความสัมพันธ์ของเหตุการณ์ และสรุปออกมาเป็นรายงานได้ จึงเริ่มใช้ ELK สำหรับรวบรวม Log ของทั้งระบบไว้ที่ส่วนกลาง และพัฒนาต่อยอดเพื่อการตรวจจับความผิดปรกติต่าง ๆ ได้ ในบทความนี้ จะนำเสนอวิธีการใช้ ELK เพื่อตรวจจับ การ Login ที่ผิดปรกติบน PSU Email โดยจะสนใจ ผู้ใช้ที่มีการ Login จากนอกประเทศเป็นหลัก การส่ง Log จาก Server เข้า ELK ที่เครื่อง Server แต่ละเครื่อง กำหนดให้ส่ง Log จาก /etc/rsyslog.d/50-default.conf เข้าไปที่ your.logstash.server:port ตามที่กำหนดไว้ การสร้าง Logstash Filter ที่ Logstash Server Input เพื่อรับข้อมูลจาก syslog ที่ port ที่ต้องการ เช่นในที่นี้เป็น 5516 เป็นต้น Filter ใช้ Grok Plugin เพื่อจับข้อมูล จาก message แบ่งเป็นส่วน ๆ ตามลักษณะ แล้วตั้งชื่อตาม Field ตามต้องการ ในที่นี้คือ description, username, domainname, clientip, actiondate, actiontime เป็นต้น (ตัวที่สำคัญในตอนนี้คือ username และ clientip) Output ตั้งว่าให้ส่งผลไปยัง Elasticsearch ที่ “your.elasticsearch.server” ที่ port 9200 [ตรงนี้มีกระบวนการบางอย่าง ซึ่งค่อยมาลงรายละเอียด] เมื่อมี Log ไหลเข้าสู่ Logstash และ ถูกประมวลผลแล้ว ก็จะเข้าสู่ Elasticsearch แล้ว ก็นำไปใช้งานบน Kibana หลังจากนั้น สามารถ Search ข้อมูล และใส่ Fields ที่สนใจ เช่น Time, Username, geoip.country_name และ description ได้ แล้ว Save เอาไว้ใช้งานต่อ ในที่นี้ ตั้งชื่อว่า squirrelmail-geoip จากนั้น สามารถเอาไปสร้างเป็น Visualization แบบ Coordinate Map ได้ เช่น ดูว่า มีการ Login Success / Failed Login / Sent จากที่ไหนบ้างในโลก จะเห็นได้ว่า ส่วนใหญ่ ใช้งานจากในประเทศไทย (วงกลมสีแดงเข้ม ๆ) ส่วนนอกประเทศ จะเป็นวงสีเหลืองเล็ก ๆ การตรวจหาการใช้งานที่ผิดปรกติ สร้าง Search ใหม่ กรองเฉพาะ ที่มี (exist) Username และ ไม่เป็น N/A และ มี (exist) geoip.country_code และ ไม่ใช่ Thailand แล้ว Save ไว้ใช้งานต่อไป ในที่ตั้งชื่อว่า squirrelmail-geoip-outside-th จากนั้น เอาไปสร้าง Visualization แบบ Vertical Barกำหนดให้Y Axis เป็นจำนวนX Axis เป็น Usernameโดยที่ Group by geoip.country_name และ descriptionก็จะทำให้รู้ว่า ใครบ้างที่ มีการใช้งานนอกประเทศ และ

Read More »

ELK #08 Oracle Audit Trail

ต่อจา ELK #07 – Logstash คราวนี้ มาใช้งานจริง โดยใช้ ELK เพื่อเก็บ Log ของ Oracle Audit Trail Oracle Audit Trail บน Database Server เก็บ Log ในรูปแบบ XML โดยแต่ละ Event จะมี tag <AuditRecord> … </AuditRecord> คุมอยู่ ที่แตกต่างจาก Log ทั่วไปคือ ในแต่ละ Event จะมีเครื่องหมาย CRLF (การขึ้นบรรทัดใหม่) เป็นระยะ ๆ ออกแบบให้ Logstash รับข้อมูล (Input Plugin) จาก TCP Port 5515 ซึ่งต้องใช้ Codec ในการรวบ Multiline ในแต่ละ Event เข้าด้วยกัน โดยหา pattern “<AuditRecord>” เป็นจุดเริ่มต้น ส่วนบรรทัดที่ไม่เจอ Pattern ดังกล่าวนั้นการตั้งค่า negate => “true” เป็นการบอกว่า “ให้ดำเนินการต่อไป” โดยจะเอาบรรทัดที่ตามมาจากนี้ ต่อท้าย ด้วยการตั้งค่า what=> “previous” ในส่วนของ Filter Plugin จะอ่านค่าจาก “message” และ ส่งสิ่งที่ถอดจาก XML ได้ ไปยัง “doc” ในส่วของ Output Plugin จะส่งออกไปยัง ElasticSearch ที่ TCP port 9200 ดัง Configuration ต่อไปนี้ จากนั้น ทาง Oracle Database Server ทำการเปิด Audit Trail แล้วเขียน Log ลงไฟล์ แล้วเขียน Cron เพื่อ Netcat ไฟล์ส่งมาให้ Lostash ที่เปิด Port TCP 5515 ไว้รอรับ ผลที่ได้คือ โดยวิธีนี้ จะเป็นการนำ Log ซึ่งจากเดิมเป็น Text Format นำมาเป็น NoSQL ได้ ซึ่งจะสามารถ Query ข้อมูลได้ง่ายยิ่งขึ้น หวังว่าจะเป็นประโยชน์ครับ

Read More »

ELK #07 LogStash

จากที่ได้กล่าวถึงมายาวนานในเรื่อง ELK  และ  ELK #02 ที่ได้กล่าวถึงการติดตั้ง LogStash ไว้เบื้องต้น ในบทความนี้จะมาลงลึก ถึงกระบวนการทำงานของ LogStash ซึ่งเป็นส่วนสำคัญในการเปลี่ยนข้อมูล Unstructured ให้เป็น Structured ตอนนี้ เราจะทำงานใน /etc/logstash/conf.d/ Simple input – output plugin สร้างไฟล์ 01-input-file.conf มีเนื้อหาดังนี้ input { file { path => [“/tmp/input.txt”] mode => “tail” } } ในส่วนนี้ เป็นการกำหนดว่า ให้ LogStash อ่านไฟล์ /tmp/input.txt โดยให้อ่านบรรทัดล่าสุด (ต่อจาก Checkpoint ก่อนหน้า) เข้ามา โดยถ้าไม่กำหนด mode => “tail” ระบบจะอ่านไฟล์ก็ต่อเมื่อ มีการสร้างไฟล์ใหม่เท่านั้น สร้างไฟล์ 98-output-file.conf มีเนื้อหาดังนี้ output { file { path => “/tmp/output.txt” } } ในส่วนนี้ เป็นการกำหนดว่า ให้ LogStash เขียนไฟล์ /tmp/output.txt เมื่อปรับเปลี่ยน configuration ต้องทำการ Restart Service service logstash restart ลองส่งข้อมูลเข้าไปในไฟล์ /tmp/input.txt ด้วยคำสั่ง echo “Hello World 1” >> /tmp/input.txt ดูผลลัพธ์ใน /tmp/output.txt cat /tmp/output.txt {“path”:”/tmp/input.txt”,”@version”:”1″,”message”:”Hello World 1″,”@timestamp”:”2018-09-11T03:42:33.645Z”,”host”:”elk1″} แสดงให้เห็นว่า ระบบ LogStash สามารถรับข้อมูลจากไฟล์ และส่งข้อมูลออกไปยังไฟล์ได้ Filter Plugin ก่อนอื่น Stop Service ด้วยคำสั่ง service logstash stop ในการจัดการข้อมูลก่อนบันทึก เช่นการกรอง การจัดรูปแบบ LogStash ทำงานผ่าน Filter Plugin ซึ่งมีหลายรูปแบบ (https://www.elastic.co/guide/en/logstash/current/filter-plugins.html) แต่ในที่นี้ จะใช้ grok เหมาะกับข้อมูล Unstructured อย่าง syslog เป็นต้น ซึ่งมักจะเป็น Log ที่ให้มนุษย์อ่านได้ง่าย แต่ไม่ค่อยเหมาะสำหรับให้คอมพิวเตอร์เอาไปใช้งานต่อ ซึ่ง LogStash มีไว้ให้แล้วกว่า 120 ตัว ต่อไป สร้าง 44-filter-basic.conf มีเนื้อหาดังนี้ filter { grok { match => { “message” => “%{IP:ipaddress} %{NUMBER:size}” } } } จากนั้น Start Service ด้วยคำสั่ง (รอสักครู่ด้วย) service logstash start แล้วส่งข้อมูลต่อไปนี้ต่อท้ายไฟล์ /tmp/input.txt echo “192.168.1.1 120” >> /tmp/input.txt และเมื่อดูผลใน /tmp/output.txt จะพบบรรทัดสุดท้าย {“message”:”192.168.1.1 120″,”@version”:”1″,”path”:”/tmp/input.txt”,”@timestamp”:”2018-09-11T04:56:03.662Z”,”size”:”120″,”host”:”elk1″,”ipaddress”:”192.168.1.1″} แสดงให้เห็นว่า สามารถใช้ filter นี้ แยกแยะข้อมูลเบื้องต้นได้ Example : Postfix Log ก่อนอื่น Stop Service ด้วยคำสั่ง service logstash stop เนื่องจาก Log แต่ละชนิด แต่ละซอฟต์แวร์มีความหลากหลายมาก แต่ดีที่มีผู้เชี่ยวชาญเค้าเขียน Pattern เอาไว้ให้ ให้ใช้คำสั่งต่อไปนี้ สร้างไดเรคทอรี่ /etc/logstash/patterns.d/ และ ดาวน์โหลด มาเก็บไว้

Read More »