Posted on

ELK介紹

架構簡介

ELK是三個開源項目的首字母縮寫,這三個項目分別是:ElasticsearchLogstashKibana

  1. Elasticsearch是一個搜索和分析引擎。
  2. Logstash是服務器端數據處理管道,能夠同時從多個來源採集數據,轉換數據,然後將數據發送到諸如Elasticsearch存儲庫中。
  3. Kibana則可以讓用戶在Elasticsearch中使用圖形和圖表對數據進行可視化。

enter image description here

ELK安裝

請參考此篇文章,非常的詳細
ELK 教學 – 從無到有安裝 ELK (CentOS/Red Hat)

大致簡述一下:

  1. 安裝VirtualBox
  2. 安裝Java
  3. 安裝Elasticsearch
  4. 安裝Beats

Config設定

請參考下面這些文章

  1. Config Of Logstash
  2. Config Of ElasticSearch
  3. Config Of Kibana
  4. Plugin Install Of All Module

Logstash的filter設定

使用grok教學

  1. https://www.elastic.co/guide/en/logstash/7.3/plugins-filters-grok.html
  2. https://medium.com/@hungtaohsieh/3%E7%A8%AE%E5%B8%B8%E7%94%A8logstash-filter-493e94a391b7

使用mutate教學
https://blog.csdn.net/cromma/article/details/52919742

grok測試工具
http://grokdebug.herokuapp.com/

Posted on

Linux 檢查硬碟使用量

檢查硬碟使用量 – df

輸入df指令
df

後面的mounted on指的是這個空間是掛載在那一個分割區

查詢某個分割區的硬碟使用狀況

df /dev
上面是查詢dev這個分割區的使用狀況

改變顯示的空間單位

預設的 df 輸出會以 KB 為單位顯示磁碟用量,但是現在的硬碟容量都很大,這樣的輸出較不好閱讀。
這時可以加上-h,來用適合閱讀的方式顯示資訊

僅顯示本機磁碟

使用
df -l

Posted on

nginx 基礎設定教學

安裝 nginx

使用以下指令安裝nginx

brew install nginx


完成之後就可使用 nginx

# 啟動 nginx
nginx
# 加上 -s option 來下指令
# 停止 nginx
nginx -s stop
# 重新讀取設定檔
nginx -s reload

若要設定為可以開機自動啟動,則把 nginx 啟動的 bash 檔放到 /etc/init.d/

設定nginx的設定檔

nginx 的設定檔名為 ngix.conf,設定檔所在的路徑可以透過 nginx -t來獲得

nginx的主要功能

  • 反向代理,實現簡單的負載均衡: 如果有多台服務器或者一台服務器多個端口,可以考慮用nginx。
  • 靜態資源緩存:把一些靜態資源(如靜態頁面,js等資源文件)放到nginx裡,可以極大的提高服務的性能。

反向代理

伺服器根據用戶端的請求,從其關聯的一組或多組後端伺服器(如Web伺服器)上取得資源,然後再將這些資源返回給用戶端,用戶端只會得知反向代理的IP位址,而不知道在代理伺服器後面的伺服器叢集的存在。

Posted on

使用pm2管理伺服器

pm2的操作

1. 安裝PM2
npm install pm2 -g
2. 啟動服務
pm2 start app.js
3. 啟動N個名為SERVICE_NAME的服務的進程
pm2 start app.js -i N --name SERVICE_NAME
4. 重啟服務
npm restart SERVICE_NAME
5. 設定記憶體使用超過多少後自動重啟伺服器
pm2 start app.js --max_memory_restart 1024M
6. 監控服務
pm2 monit

查看服務進程數

1. 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l

2. 查看每個物理CPU中的核數
cat /proc/cpuinfo| grep "cpu cores"| uniq

3. 查看邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l

確認是否使用nginx

nginx的主要功能如下

  • 反向代理,實現簡單的負載均衡: 如果有多台服務器或者一台服務器多個端口,可以考慮用nginx。
  • 靜態資源緩存:把一些靜態資源(如靜態頁面,js等資源文件)放到nginx裡,可以極大的提高服務的性能。

日誌問題

日誌系統對於任意應用而言,通常都是必不可少的一個輔助功能。pm2的相關文件默認存放於$HOME/.pm2/目錄下,其日誌主要有兩類:

  • pm2自身的日誌,存放於$HOME/.pm2/pm2.log;
  • pm2所管理的應用的日誌,存放於$HOME/.pm2/logs/目錄下,標準誰出日誌存放於${APP_NAME}_out.log,標準錯誤日誌存放於${APP_NAME}_error.log;

pm2支持配置文件啟動

pm2 ecosystem:生成配置文件ecosystem.json
pm2 startOrRestart /file/path/ecosystem.json :通過配置文件啟動服務

如下是開發時ecosystem.json的內容:

{ 
    apps : [
        { 
            name : "nova", 
            max_memory_restart: "300M", 
            script : "/root/nova/app.js", 
            out_file : "/logs/nova_out.log", 
            error_file : "/logs/nova_error.log", 
            instances : 4, 
            exec_mode : "cluster", 
            env: {
                NODE_ENV: "production"
            }
        }
    ]
}


採用cluster模式啟動了4個服務進程;如果服務佔用的內存超過300M,會自動進行重啟。


更多相關知識請見官網:ecosystem-file

支援自動化部署

一個簡單的process.json範例

{
   "apps" : [{
      "name" : "HTTP-API",
      "script" : "http.js"
   }],
   "deploy" : {
     // "production" is the environment name
     "production" : {
       "user" : "ubuntu",
       "host" : ["192.168.0.13"],
       "ref"  : "origin/master",
       "repo" : "git@github.com:Username/repository.git",
       "path" : "/var/www/my-repository",
       "post-deploy" : "npm install; grunt dist"
      },
   }
}


/bin/bash:

# Setup deployment at remote location
$ pm2 deploy production setup

# Update remote version
$ pm2 deploy production update

# Revert to -1 deployment
$ pm2 deploy production revert 1

# execute command on remote machines
$ pm2 deploy production exec "pm2 reload all"


更多介紹請見官網:simple-deploy

Posted on

查看某個Linux裡服務的狀態

程序管理指令ps

ps指令可以將某個時間點的程序運作情況擷取下來

僅觀察自己的 bash 相關程序: ps -l

觀察系統所有程序: ps aux

若覺得這個列表太長,可以使用grep來獲取想要知道的服務,例如
[root@study ~]# ps aux | egrep '(cron|rsyslog)'

使用service命令

下面指令可以查詢單個服務的運行狀態
[root@localhost ~]# service sshd status

使用服務管理工具

請參考這篇文章:linux管理Service的指令

參考資料

Posted on

給予使用者帳號sudo權限

創建使用者帳號

  • 使用有root權限的使用者登入系統
  • 使用useradd來創建一個普通的使用者帳號
    # useradd USERNAME
  • 設定這個使用者的密碼
    # passwd USERNAME
    Changing password for user USERNAME.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
  • 使用visudo去編輯/etc/sudoers檔案
    # visudo
  • 尋找下面這行代表擁有sudo權限的群組的設定,並移除前面的#字號
    ## Allows people in group wheel to run all commands
    # %wheel ALL=(ALL) ALL
  • 新增剛剛創建的使用者進入剛剛的群組裡
    # usermod -aG wheel USERNAME

測試是否有成功給予權限

  • 轉換身份至剛剛創建的帳號
    # su USERNAME -
  • 查看所在群組
    $ groups
    USERNAME wheel
  • 測試sudo指令
    $ sudo whoami
    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

    [sudo] password for USERNAME:
    root

參考資料

Posted on

Hard Link與Symbolic Link的比較

硬連結 (Hard Link)

其特性如下:

  • 以相同的i-node指向相同的檔案。
  • 主要用於備份。
  • 只能在同一個磁區 (Partition)中建立。
  • 只能連結檔案,不能連結目錄。
  • 指令為ln (原始檔案) (目地檔案)

如果我們對某個檔案做了硬連結,那麼若刪掉了其中一個,另一個仍然會可以讀去,但是,hard link 是有限制的:

  • 不能跨 Filesystem
  • 不能 link 目錄。

使用範例

軟連結 (Symbolic Link)

其特性如下:

  • 以絕對路徑或相對路徑指向原始的檔案。
  • 主要用於簡化路徑。
  • 類似MS-Windows下的「建立捷徑」的功能。
  • ln -fsv (原始檔案) (目地檔案)

這個的概念就很像windows裡面的捷徑概念,當來源檔被刪除之後,symbolic link 的檔案會開不了。
但是他可以跨FileSystem也可以link目錄,在使用上相對會較為方便。

使用範例

Posted on

使用 systemctl 操作系統層級

列出所有的系統層級

# systemctl list-units --type target

顯示目前系統預設運作層級

# systemctl get-default

切換運作層級至文字模式(runlevel 3)
# systemctl isolate multi-user.target

顯示某個服務的系統層級

若要查看某個服務現在執行的系統層級,可使用下列指令
systemctl show -p WantedBy service-name

服務的runlevel有下面這些:

對照chkconfig的runlevel如下:

Posted on

linux管理Service的指令

systemctl命令

systemctl命令是系統服務管理的指令,它將servicechkconfig這兩個命令組合到一起。

systemctl語法使用介紹

[root@study ~]# systemctl [command] [unit]

command 主要有:
start :立刻啟動後面接的 unit
stop :立刻關閉後面接的 unit
restart :立刻關閉後啟動後面接的 unit,亦即執行 stop 再 start 的意思
reload :不關閉後面接的 unit 的情況下,重新載入設定檔,讓設定生效
enable :設定下次開機時,後面接的 unit 會被啟動
disable :設定下次開機時,後面接的 unit 不會被啟動
status :目前後面接的這個 unit 的狀態,會列出有沒有正在執行、開機預設執行否、登錄等資訊等!
is-active :目前有沒有正在運作中
is-enabled:開機時有沒有預設要啟用這個 unit

使用範例

  • 開啟atd服務
    [root@study ~]# systemctl start atd.service
  • 關閉atd服務
    [root@study ~]# systemctl start atd.service
  • 查看現在狀態
    [root@study ~]# systemctl status atd.service
  • 開機時自動開啟
    [root@study ~]# systemctl enable atd.service
  • 開機時不要自動開啟
    [root@study ~]# systemctl disable atd.service
  • 查看所有已啟動的服務
    [root@study ~]# systemctl list-units --type=service
  • 重啟某服務
    [root@study ~]# systemctl restart atd.service
Posted on

目錄刪除rm相關指令

rmdir指令

許多人刪除資料夾時仍會使用rmdir指令,這個指令在刪除空資料夾時是OK的,但是若資料夾內有其他檔案時,便會顯示錯誤

並且這個指令只能刪除資料夾而無法刪除檔案。

rm指令

rm:remove 刪除目錄或檔案
若要完全刪除一個含有內容的資料夾,則應加上-rf參數。
也就是
rm -rf 目錄名字

  • -r 就是向下遞迴,不管有多少級目錄,一併刪除
  • -f 就是直接強行刪除,不作任何提示的意思
  • -d 直接刪除目錄,目錄裡面不能有檔案或是資料夾。
  • -i 刪除之前會詢問,如果要刪除建議使用這個參數,可以避免誤刪。

1、刪除資料夾:
rm -rf /var/log/httpd/access
將會刪除/var/log/httpd/access目錄以及其下所有檔案、資料夾

2、刪除檔案使用:
rm -f /var/log/httpd/access.log