Developing applications in Code Igniter is fun and easy, as we do not have to write much of the actual queries because of its Active Record Implementation. Moreover, we can find plugins for CI which will write all the model classes for you in a click.

As we keep on developing application, we might sometimes need to keep track of the queries that have been run during each page load. It might seem minimal but while developing large enterprise applications, even the smallest optimizations will speed up things a lot.

Below you’ll find a CodeIgniter hook that logs all database queries to a simple text file.


/* config/hooks.php */
$hook['post_system'][] = array(
    'class' => 'LogQueryHook',
    'function' => 'log_queries',
    'filename' => 'LogQueryHook.php',
    'filepath' => 'hooks'
);
/* application/hooks/LogQueryHook.php */
class LogQueryHook {

    function log_queries() {    
        $CI =& get_instance();
        $times = $CI->db->query_times;
        $dbs    = array();
        $output = NULL;     
        $queries = $CI->db->queries;

        if (count($queries) == 0){
            $output .= "no queries\n";
        }else{
            foreach ($queries as $key=>$query){
                $output .= $query . "\n";
            }
            $took = round(doubleval($times[$key]), 3);
            $output .= "===[took:{$took}]\n\n";
        }

        $CI->load->helper('file');
        if ( ! write_file(APPPATH  . "/logs/queries.log.txt", $output, 'a+')){
             log_message('debug','Unable to write query the file');
        }   
    }
}


원문 : http://sajanmaharjan.com.np/2013/02/05/code-igniter-log-all-queries/

git clone <REMOTE-URL>          // 해당 remote 저장소의 데이터를 local로 저장(복사)한다.

git branch -a                    // 모든 Branch 를 보여준다. git branch <BRANCH-NAME>         // 새로운 Branch 생성 git branch -d <BRANCH-NAME>      // 해당 Branch 삭제 git checkout <BRANCH-NAME>       // 해당 Branch 로 이동

git add <FILE-NAME>              // 해당 파일을 Stage 으로 올리기. git commit -m "message"          // message 로 Commit 작성 git commit -a                    // Staging area 생략하고 tracked 파일들을 바로 Commit git commit --amend               // Staging area 를 이용해 신규 Commit으로 재작성(완료한 Commit을 수정할 때) git reset HEAD <FILE-NAME>       // 파일을 Staged 상태에서 Un-stage 상태로 변경 git checkout -- <FILE-NAME>      // 수정된 파일을 원상태로 복구 git log -<N>                     // 최근 N 개의 로그를 출력

git push                         // 현재 branch 의 내용을 remote 저장소로 push. git fetch                        // merge 하지않고, 현재 branch 의 remote 저장소에서 데이터 가져오기 git merge <BRANCH-NAME>          // 해당 branch 를 현재 branch 에 merge 한다. git pull                         // 현재 branch 의 remote 저장소 데이터를 자동 Merge.(fetch + merge)



Git 한글 가이드 설명서 https://git-scm.com/book/ko/v2



Git Reference https://git-scm.com/docs



출처: http://osebin.tistory.com/117?category=707965 [DREAM IT, WISH IT, DO IT]

root 계정으로 설치 진행



Java 설치 

Controller, Agent, Monitor 모두 Java가 설치되어 있어야 한다. 


Install OpenJDK8 JRE

# yum install java-1.8.0-openjdk


Install OpenJDK8 JDK

# yum install java-1.8.0-openjdk-devel



설치된 JDK 확인

# java -version

openjdk version "1.8.0_102"


JDK가 설치되어 있을 경우 현재 설치된 JDK 목록 확인

# yum list installed | grep jdk



설치된 JAVA의 JAVA_HOME 설정


>> JAVA가 설치된 경로 확인

# which javac

/usr/bin/javac


>> 실제 경로를 확인

# readlink -f /usr/bin/javac

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/bin/javac


>> JAVA가 설치 된 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64 폴더를 알게 됨.


>> JAVA_HOME 설정을 위해 profile 열기

# vim /etc/profile


>>맨 아랫줄에 확인된 JAVA가 설치 된 폴더 경로를 설정

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64


>> vim 에서 :wq! 명령어로 저장하고 나옴.


>> ssh로 접속했으면 재접속하면 JAVA_HOME 설정 끝.



======================== 참고 ==========================


설치된 JRE 제거

# yum remove java-1.8.0-openjdk


설치된 JDK 제거

# yum remove java-1.8.0-openjdk-devel


=======================================================



Controller 설치


# cd /home


nGrinder 설치 및 실행

# wget https://github.com/naver/ngrinder/releases/download/ngrinder-3.4.1-20170131/ngrinder-controller-3.4.1.war 


default로 nGrinder은 웹서버 포트로 8080을 사용합니다. 만약 다른 포트를 사용하고자 한다면, 실행시에 --port 옵션을 주어 포트를 재설정 하면 됩니다.

# java -XX:MaxPermSize=200m -jar ngrinder-controller-3.4.1.war --port 80


웹브라우저에서 접속

http://서버IP:포트번호


로그인 후 계정 이름을 클릭하면 드롭다운 메뉴에서 에이전트, 모니터, 레코더 다운로드 가능



Controller가 설치 된 서버에서는 아래 TCP 포트를 허용해 주어야 한다.


Agent : Any ==> Controller : 16001

Agent : Any ==> Controller : 12000 ~ 12000+(허용되는 동시 테스트 수)




Agent 설치 (Controller와 다른 별도의 서버에 설치하기를 권장)


# cd /home


>> Agent Download

# wget -O ngrinder-agent-3.4.1.tar http://ngrinder.controller.ip/agent/download


>> 압축 해제

tar xvf ngrinder-agent-3.4.1.tar


>> 압축 해제 후 생성된 폴더로 이동

# cd /home/ngrinder-agent


>> Agent 실행

# ./run_agent.sh -o




Monitor 설치 (Target 서버에 설치)


>> Monitor Download

# cd /home

# sudo wget -O ngrinder-monitor-3.4.1.tar http://ngrinder.controller.ip/monitor/download


>> 압축 해제

# sudo tar xvf ngrinder-monitor-3.4.1.tar


>> 압축 해제 후 생성된 폴더로 이동

# cd ngrinder-monitor



Controller와의 통신을 위해 TCP 13243 포트를 허용해 주어야 한다.


방화벽에서 13243포트 접속 허용

# firewall-cmd --permanent --zone=public --add-port=13243/tcp 

# firewall-cmd --reload (방화벽 변경사항적용)

# firewall-cmd --list-all (방화벽 목록)


방화벽 포트 변경되었을 경우

# systemctl restart firewalld (방화벽 재실행)



# Monitor 실행

./run_monitor.sh


# Stress Test 후 Monitor 중지

./stop_monitor.sh




========================== 설치된 nGrinder 서버 스타트 ==========================


Controller

# cd /home


# java -XX:MaxPermSize=200m -jar ngrinder-controller-3.4.1.war --port 80


웹브라우저에서 접속

http://ngrinder.controller.ip     (http://서버IP:포트번호)


Agent


# cd /home/ngrinder-agent


# ./run_agent.sh -o


==============================================================================


[참고]

nGrinder란? & docker 설치 방법

http://brownbears.tistory.com/25

https://hub.docker.com/r/ngrinder/controller/




How To Install Java on CentOS and Fedora

https://www.digitalocean.com/community/tutorials/how-to-install-java-on-centos-and-fedora


NHN - nGrinder 설치 가이드

http://estenpark.tistory.com/359


NHN - nGrinder MaraDB/MySQL 접속 방법 (mysql.jdbc)

http://estenpark.tistory.com/368


nGrinder 3.4.1 설치

https://force44.blog.me/221196829516

http://spesmare.com/221176703784


nGrinder란? & docker 설치 방법

http://brownbears.tistory.com/25

https://hub.docker.com/r/ngrinder/controller/


nGrinder installation Guide

https://github.com/naver/ngrinder/wiki/Installation-Guide


https://github.com/naver/ngrinder/releases



nGrinder 3.3 설치방법

http://junoyoon.tistory.com/entry/nGrinder-33-설치방법?category=487802

https://gtmetrix.com

https://pageweight.imgix.com

$_SERVER['DOCUMENT_ROOT'] : 사이트 루트의 물리적 경로. ex) /home/ksprg/www


$_SERVER['HTTP_ACCEPT_ENCODING'] : 인코딩 받식. ex) gzip, deflate


$_SERVER['HTTP_ACCEPT_LANGUAGE'] : 언어. ex) ko


$_SERVER['HTTP_USER_AGENT'] : 사이트 접속한 클라이언트 프로그램 정보. 

                                                                     ex) Mozilla/4.0(compatible; MSIE 7.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705


$_SERVER['REMOTE_ADDR'] : 사이트 접속한 클라이언트의 IP. ex) 192.168.0.100

 

$_SERVER['HTTP_REFERER'] : 이전페이지 주소값


$_SERVER['SCRIPT_FILENAME'] : 실행되고 있는 파일의 전체경로. ex) /home/ksprg/www/index.php


$_SERVER['SERVER_NAME'] : 사이트 도메인 : roadrunner.tistory.com (virtual host에 지정한 도메인)

 

$_SERVER['HTTP_HOST'] : 사이트 도메인 : roadrunner.tistory.com (접속할 때 사용한 도메인)


$_SERVER['SERVER_PORT'] : 사이트 포트. ex) 80


$_SERVER['SERVER_SOFTWARE'] : 서버의 소프트웨어 환경

                                                                        ex) Apache/1.3.23 (Unix) PHP/4.1.2 mod_fastcgi/2.2.10 mod_throttle/3.1.2 mod_ssl/2.8.6


$_SERVER['GATEWAY_INTERFACE'] : CGI 정보. ex) CGI/1.1


$_SERVER['SERVER_PROTOCOL'] : 사용된 서버 프로토콜. ex) HTTP/1.1


$_SERVER['REQUEST_URI'] : 현재페이지의 주소에서 도메인 제외. ex) /index.php?user=ksprg&name=hong


$_SERVER['PHP_SELF'] : 현재페이지의 주소에서 도메인과 넘겨지는 값 제외. ex) /test/index.php

                                                   파일명만 가져올때 : basename($_SERVER['PHP_SELF']);


$_SERVER['APPL_PHYSICAL_PATH'] : 현재페이지의 실제 파일 주소. ex) /home/ksprg/www/

 

$_SERVER['QUERY_STRING'] : GET 방식의 파일명 뒤에 붙어서 넘어오는 파라미터 값. ex) ?user=ksprg&name=hong 




아키텍처 다이어그램용 AWS 심플 아이콘

https://aws.amazon.com/ko/architecture/icons/




https://www.draw.io/?splash=0&libs=aws2


https://cacoo.com/diagrams/


https://cloudcraft.co/app

도스 프롬프트 창에서 명령어 입력



tracert -d  (해당 아이피 or 도메인)



route의 리스트 및 상태를 나타낸다.

여기서 타임이 500~600 이상일 경우, 해당 도메인 보다 거치는 라우터에 문제가 있다고 보면 된다.

 

아래는 매개변수의 설명이다.

-D

tracert가 중간 라우터의 IP주소를 해당 이름으로 확인하지 않도록 한다. 이렇게 하면 tracert결과를 빨리 표시할 수 있다.

 

-H MaximumHops

대상을 검색하는 경로에서 최대 홉의 수를 지정합니다. 기본값은 30홉이다.

 

-J HostList

에코 요청 메시지가 HostList에 지정된 중간 대상 집합과 IP머리글에 원본 라우팅 완화 옵션을 사용하도록 지정합니다. 원본 라우팅 완화를 사용하면 연속되는 중간 대상이 하나 또는 여러 라우터에 분리될 수 있습니다. 호스트 목록에서 주소 및 이름의 최대 수는 9입니다. HostList는 공백으로 구분된 일련의 IP주소(점으로 구분된 십진수 표시법)입니다. IPv4주소를 추적할 때만 이 매개변수를 사용합니다.

 

-W Timeout

ICMP Time Exceeded나 수신될 에코 요청 메시지와 일치하는 에코 요청 메시지를 기다리는 시간(밀리초)을 지정합니다. 제한 시간 안에 수신되지 않으면 별표(*)가 표시 됩니다. 기본 제한 시간은 4000(4초)입니다.

 

-R

중간 대상으로 대상을 사용하고 반대 방향 경로를 테스트하여 로컬 호스트로 에코 요청 메시지를 보내는 데 사용할 IPv6라우팅 확장 헤더를 지정합니다.

 

-S

에코 요청 메시지에 사용할 원본 주소를 지정합니다. IPv6주소를 추척할 때만 이 매개변수를 사용합니다.

 

-4

Tracert.exe가 이 추척에 IPv4만 사용할 수 있도록 지정합니다.

 

-6

Tracert.exe가 이 추척에 IPv6만 사용할 수 있도록 지정합니다.

톰캣 실시간 로그 확인

# tail -f /var/log/tomcat8/catalina.out 


아파치 실시간 로그 확인

# tail -f /var/log/httpd/error_log


Netdata 리눅스 서버 모니터링 도구


공식 사이트 : http://my-netdata.io

데모 : http://my-netdata.io/#demosites

깃헙 : https://github.com/firehol/netdata

설치 가이드 : https://github.com/firehol/netdata/wiki/Installation


https://github.com/firehol/netdata/wiki/Add-more-charts-to-netdata#web-servers



http://blog.seabow.pe.kr/?p=7380


>> docker 를 설치 함.

# yum install docker -y


>> docker 서비스 실행

# systemctl start docker


>> docker 가 구동되어 있는 상태에서 위의 명령어를 입력하면 docker image 를 먼저 pull 하고  컨테이너를 run 함.

# docker run -d --cap-add SYS_PTRACE -v /proc:/host/proc:ro -v /sys:/host/sys:ro -p 19999:19999 titpetric/netdata


>> 실행 상태 확인

# docker ps -a


>> 방화벽 설정

# firewall-cmd --permanent --zone=public --add-port=19999/tcp 

# firewall-cmd --reload

# firewall-cmd --list-all


>> docker 컨테이너가 실행 되었다면 브라우져에서 아래의 주소로 접속


http://서버IP:19999

ex)

http://192.168.10.2:19999




http://izigom.tistory.com/168




Netdata 설치 및 실행하기


1). 시스템 준비 명령어

 

[centos]

yum install autoconf automake curl gcc git libmnl-devel libuuid-devel lm-sensors make MySQL-python nc pkgconfig python python-psycopg2 PyYAML zlib-devel

 

[ubuntu]

apt-get install zlib1g-dev uuid-dev libmnl-dev gcc make git autoconf autoconf-archive autogen automake pkg-config curl

 

2). 코드 다운로드

git clone https://github.com/firehol/netdata.git --depth=1

 

cd netdata

 

3). 설치

./netdata-installer.sh --install /opt

4). 실행

http://localhost:19999/ 



출처: http://kogun82.tistory.com/158 [Ctrl+C&V 로 하는 프로그래밍]



netdata에 Apache perfomance data 추가 방법

http://adminid.kr/apache/105454


netdata에 Apache perfomance data 추가 방법

http://adminid.kr/mysql/105461



centOS7 mysql 설치


root 로 명령어 실행


yum으로 설치하기 전에 아래 명령어를 설치 환경에 맞게 선택해서 실행해줘야 한다.



############ RHEL / centOS7 ###############

mysql 5.7

# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm


mysql 5.6

# rpm -ivh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm



############ RHEL6 / centOS6 / Amazon Linux ###############


mysql 5.7

# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm


mysql 5.6

# rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm







yum 으로 설치

# yum -y install mysql-community-server



설치 완료 후 MySQL을 구동한다.

# systemctl start mysqld.service


재시작 시 mysql 이 실행 되도록 설정

# systemctl enable mysqld.service


MySQL 서버의 상태를 확인

# systemctl status mysqld.service



######################################################################################


MySQL 서버 초기화 (MySQL 5.7 전용) : 서버의 초기 시작시, 서버의 데이터 디렉토리가 비어 있다면 다음과 같은 일이 발생합니다 :


+ 서버가 초기화됩니다.


+ SSL 인증서 및 키 파일은 데이터 디렉토리에 생성됩니다.


+ validate_password 플러그인을 설치하고 사용할 수 있습니다.


+ 수퍼 유저 계정 'root'@'localhost' 이 생성됩니다. 수퍼 유저의 암호가 설정되어 오류 로그 파일에 저장됩니다. 이를 표시하려면 다음 명령을 사용하십시오.


shell> sudo grep 'temporary password' /var/log/mysqld.log


생성 된 임시 암호로 로그인하여 가능한 한 빨리 루트 암호를 변경하고 수퍼 유저 계정의 사용자 정의 암호를 설정하십시오.


shell> mysql -uroot -p


mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';


*** 노트 ***

MySQL의 validate_password 플러그인은 기본적으로 설치됩니다. 이렇게하려면 암호에 적어도 하나의 대문자, 소문자 한 자, 한 자릿수 및 한 개의 특수 문자가 포함되어 있어야하며 총 암호 길이는 8 자 이상이어야합니다.


mysql root password : 6y5t4r#E@W!Q


#######################################################################################






mysql까지 들어가면 프롬프트가 mysql>로 바뀌면 설치가 완료

# mysql


quit 명령으로 mysql에서 빠져 나옵니다.

mysql>quit


reboot 명령으로 재시작합니다.

# reboot



재시작 후 mysql 이 정상 실행 되면 정상적으로 설치가 완료된것입니다.

# mysql -uroot -p


설정한 패스워드 입력하여 로그인


mysql에서 명령을 입력합니다.

mysql> status


설정값에서 Server characterset, Db characterset 값이 utf8 이 아닐 경우


mysql의 charaterset 을 utf8로 통일 시키도록 합니다.


my.cnf 파일을 편집

# vi /etc/my.cnf


############ 기존에 있는것은 놔두고 없는것은 추가 ###############

[client] 

default-character-set = utf8

 

[mysql]

default-character-set=utf8

 

[mysqld]

 

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

 

character-set-server=utf8

collation-server=utf8_general_ci

init_connect=SET collation_connection = utf8_general_ci

init_connect=SET NAMES utf8

 

character-set-client-handshake = FALSE

skip-character-set-client-handshake

 

[mysqldump]

default-character-set=utf8


========================================= /etc/my.cnf =======================================================


# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html


[mysqld]

#

# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size = 128M

#

# Remove leading # to turn on a very important data integrity option: logging

# changes to the binary log between backups.

# log_bin

#

# Remove leading # to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock


# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0


log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


character-set-server=utf8

collation-server=utf8_general_ci

init_connect=SET collation_connection = utf8_general_ci

init_connect=SET NAMES utf8

character-set-client-handshake = FALSE

skip-character-set-client-handshake



[client]

default-character-set = utf8


[mysql]

default-character-set=utf8


[mysqldump]

default-character-set=utf8


=======================================================================================================


저장 후 mysql을 재시작

# systemctl restart mysqld

 

# mysql -uroot -p


mysql을 실행하고  status 명령으로 charcterset이 utf8 로 변경되었는지 확인

mysql> status



기본적으로 MySQL은 내부(Local)에서만 접속할 수 있다.

때문에 외부 접속은 개별적으로 등록해주어야하는데

mysql> SELECT HOST, USER FROM MYSQL.USER;

​우선 위와같이 쿼리를 날려보면

접근이 허가된 사용자와 호스트 내역을 보여준다.


​Localhost에서 접속할 수 있는 root계정은 기본적으로 등록되어 있을거고

자신이 접근하고자 하는 계정과 호스트를 다음과 같이 등록해준다.

​1. 특정 IP에서만 접속 할 경우 (ex. 111.222.33.44 IP에서만 접근)


mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.333.44' identified by '비밀번호';

mysql> FLUSH PRIVILEGES;



​2. 특정 IP 대역에서 접속 할 경우 (ex. 111.222.로 시작하는 IP대역)


mysql> GRANT ALL PRIVILEGES ON *.* TO '계정'@'111.222.%' identified by '비밀번호';

mysql> FLUSH PRIVILEGES;


3. 모든 IP를 허용 할 경우


mysql> GRANT ALL PRIVILEGES ON *.* TO '계정'@'%' identified by '비밀번호';

mysql> FLUSH PRIVILEGES;


​%는 '모든 것'이라는 의미를 가지며

만약 root 계정을 어디서나 접속할 수 있도록하고 계정 비밀번호가 1234라면

다음과 같이 쿼리를 날리면 된다.


mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by '1234';

mysql> FLUSH PRIVILEGES;

완료하였다면 아래 select문을 실행하여 접근 허용 내역에 잘 등록되었는지 꼭 확인한다.


mysql> SELECT HOST, USER FROM MYSQL.USER;




방화벽에서 3306포트 접속 허용

# firewall-cmd --permanent --zone=public --add-port=3306/tcp 


방화벽 변경사항적용

# firewall-cmd --reload 


방화벽 목록

# firewall-cmd --list-all 


포트 변경되었을 경우 방화벽 재실행

# systemctl restart firewalld



참고 URL

https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/#repo-qg-yum-installing

https://opentutorials.org/module/1701/10229

http://blog.naver.com/writer0713/221061669555

http://blog.naver.com/dongju1325/220964320999

+ Recent posts